狠狠撸

狠狠撸Share a Scribd company logo
Jubakitでもっと楽をしよう
Tetsuya Shioda
Jubatus hands-on #5 November 1, 2017
本資料で話すこと
? Jubakit の紹介
? Jubakit を使ってデフォルト判定をしてみる
? 前回の Casual Talk からの機能改善
? scikit-learn wrapper の紹介
? embedded jubatus の紹介
? まとめ
Jubatus hands-on #5 2
Jubakit とは
? Jubatus を使ったデータ分析を もっと簡単に する
Pythonモジュール
? 何が簡単になった?
? scikit-learnとの連携 や外部データソースの取り込みなどが簡単
? Jubatusサーバの起動不要で、パラメータチューニングが簡単
? 利用環境:
? Python 2.7 以降、Python 3.3 以降をサポート
? Jubatus 0.8.0 以降で利用可能
Jubatus hands-on #5 3
前回の Casual Talk
? /kmaehashi/jubakit-63202847
? http://jubat.us/ja/jubakit/
Jubatus hands-on #5 4
Jubakit の アーキテクチャ
Jubatus hands-on #5 5
デフォルト判定をJubakitで行う
Jubatus hands-on #5 6
1. CSVLoader を利用してデータセットを読み込む
2. 分類サービスを起動して、学習と予測を行う
データセットの読み込み
Jubatus hands-on #5 7
from jubakit.classifier import Dataset, Schema
from jubakit.loader.csv import CSVLoader
schema = Schema({“Y”: Schema.LABEL},
Schema.NUMBER)
loader = CSVLoader(“data/dataset_train.csv”)
dataset = Dataset(loader, schema)
Jubakit に流し込める Dataset を作成する
データセットの読み込み
Jubatus hands-on #5 8
from jubakit.classifier import Dataset, Schema
from jubakit.loader.csv import CSVLoader
schema = Schema({“Y”: Schema.LABEL},
Schema.NUMBER)
loader = CSVLoader(“data/dataset_train.csv”)
dataset = Dataset(loader, schema)
“Y”列をラベルとして読み込み、その他は全て数値型にする
データセットの読み込み
Jubatus hands-on #5 9
from jubakit.classifier import Dataset, Schema
from jubakit.loader.csv import CSVLoader
schema = Schema({“Y”: Schema.LABEL},
Schema.NUMBER)
loader = CSVLoader(“data/dataset_train.csv”)
dataset = Dataset(loader, schema)
読み込みたいCSVファイルを指定する
データセットの読み込み
Jubatus hands-on #5 10
from jubakit.classifier import Dataset, Schema
from jubakit.loader.csv import CSVLoader
schema = Schema({“Y”: Schema.LABEL},
Schema.NUMBER)
loader = CSVLoader(“data/dataset_train.csv”)
dataset = Dataset(loader, schema)
loaderとschemaを利用して、データセットを作成する
分類サービスの作成
Jubatus hands-on #5 11
from jubakit.classifier import Classifier, Config
config = Config(method=“AROW”,
parameter={
“regularization_weight”: 0.1
})
classifier = Classifier.run(config)
設定を引数でダイレクトに定義して、Serviceを起動する
分類サービスの作成
Jubatus hands-on #5 12
from jubakit.classifier import Classifier, Config
config = Config(method=“AROW”,
parameter={
“regularization_weight”: 0.1
})
classifier = Classifier.run(config)
JSONで記述していた設定を引数に渡す
分類サービスの作成
Jubatus hands-on #5 13
from jubakit.classifier import Classifier, Config
config = Config(method=“AROW”,
parameter={
“regularization_weight”: 0.1
})
Classifier = Classifier.run(config)
Classifierサービスを起動する
学習?予測を行う
Jubatus hands-on #5 14
for _ in classifier.train(dataset_train):
pass
y_true, y_pred = [], []
for (idx, label, result) in
classifier.classify(dataset_test):
y_true.append(label)
y_pred.append(result[0][0])
通常のJubatusと同様に、train/classifyを呼ぶ
学習?予測を行う
Jubatus hands-on #5 15
for _ in classifier.train(dataset_train):
pass
y_true, y_pred = [], []
for (idx, label, result) in
classifier.classify(dataset_test):
y_true.append(label)
y_pred.append(result[0][0])
学習を行う (yieldなのでfor文を回す)
学習?予測を行う
Jubatus hands-on #5 16
for _ in classifier.train(dataset_train):
pass
y_true, y_pred = [], []
for (idx, label, result) in
classifier.classify(dataset_test):
y_true.append(label)
y_pred.append(result[0][0])
予測結果を取得する
確信度の最も高いラベルを取るにはresult[0][0]
前回の Casual Talk からの変更点
? 分析機能 の追加:
? Classifier, Anomaly, Recommender, Regression が利用可能
? scikit-learn wrapper の追加:
? fit(X, y) や predict(X) など、お馴染みの API から Jubatus を利用可能
? jubash:CLI を利用して対話的に Jubatus を利用できるツール
? コードを書くまでもないが、挙動確認をしたいときに便利
? jubamodel:保存したモデルの設定変更ができるツール
? config の書き換え
? 近傍探索モデルのClassifierモデルとの相互変換、など
Jubatus hands-on #5 17
scikit-learn wrapper の使い方
Jubatus hands-on #5 18
from sklearn.metrics import classification_report
from jubakit.wrapper.classifier import LinearClassifier
clf = LinearClassifier(method=“AROW”,
regularization_weight=0.1,
embedded=False)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
scikit-learn と同様のインターフェースで利用可能
scikit-learn wrapper の使い方
Jubatus hands-on #5 19
from sklearn.metrics import classification_report
from jubakit.wrapper.classifier import LinearClassifier
clf = LinearClassifier(method=“AROW”,
regularization_weight=0.1,
embedded=False)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
embeddedオプション:embedded_jubatusを使うか否か
Embedded Jubatus
? jubatus_coreを直接叩ける Pythonモジュール
? jubatus_core: Jubatusの機械学習実装部
? データ授受が高速なのでパラメータ調整などで役立つ
? クライアントを少し変えるだけで利用可能
Jubatus hands-on #5 20
from jubatus.classifier.client import Classifier
classifier = Classifier(host, port, name)
from jubatus.embedded import Classifier
classifier = Classifier(‘config.json’)
設定ファイルのJSONを直接パスで指定するだけでOK
今まで
embedded
本資料で話したこと
? Jubakit の紹介
? Jubakit を使ってデフォルト判定をしてみる
? 前回の Casual Talk からの機能改善
? scikit-learn wrapper の紹介
? embedded jubatus の紹介
Jubatus hands-on #5 21
さいごに
Pull-Request お待ちしてます!
https://github.com/jubatus/jubakit
Jubatus hands-on #5 22

More Related Content

Jubatus: Jubakitでもっと楽をしよう

  • 2. 本資料で話すこと ? Jubakit の紹介 ? Jubakit を使ってデフォルト判定をしてみる ? 前回の Casual Talk からの機能改善 ? scikit-learn wrapper の紹介 ? embedded jubatus の紹介 ? まとめ Jubatus hands-on #5 2
  • 3. Jubakit とは ? Jubatus を使ったデータ分析を もっと簡単に する Pythonモジュール ? 何が簡単になった? ? scikit-learnとの連携 や外部データソースの取り込みなどが簡単 ? Jubatusサーバの起動不要で、パラメータチューニングが簡単 ? 利用環境: ? Python 2.7 以降、Python 3.3 以降をサポート ? Jubatus 0.8.0 以降で利用可能 Jubatus hands-on #5 3
  • 4. 前回の Casual Talk ? /kmaehashi/jubakit-63202847 ? http://jubat.us/ja/jubakit/ Jubatus hands-on #5 4
  • 6. デフォルト判定をJubakitで行う Jubatus hands-on #5 6 1. CSVLoader を利用してデータセットを読み込む 2. 分類サービスを起動して、学習と予測を行う
  • 7. データセットの読み込み Jubatus hands-on #5 7 from jubakit.classifier import Dataset, Schema from jubakit.loader.csv import CSVLoader schema = Schema({“Y”: Schema.LABEL}, Schema.NUMBER) loader = CSVLoader(“data/dataset_train.csv”) dataset = Dataset(loader, schema) Jubakit に流し込める Dataset を作成する
  • 8. データセットの読み込み Jubatus hands-on #5 8 from jubakit.classifier import Dataset, Schema from jubakit.loader.csv import CSVLoader schema = Schema({“Y”: Schema.LABEL}, Schema.NUMBER) loader = CSVLoader(“data/dataset_train.csv”) dataset = Dataset(loader, schema) “Y”列をラベルとして読み込み、その他は全て数値型にする
  • 9. データセットの読み込み Jubatus hands-on #5 9 from jubakit.classifier import Dataset, Schema from jubakit.loader.csv import CSVLoader schema = Schema({“Y”: Schema.LABEL}, Schema.NUMBER) loader = CSVLoader(“data/dataset_train.csv”) dataset = Dataset(loader, schema) 読み込みたいCSVファイルを指定する
  • 10. データセットの読み込み Jubatus hands-on #5 10 from jubakit.classifier import Dataset, Schema from jubakit.loader.csv import CSVLoader schema = Schema({“Y”: Schema.LABEL}, Schema.NUMBER) loader = CSVLoader(“data/dataset_train.csv”) dataset = Dataset(loader, schema) loaderとschemaを利用して、データセットを作成する
  • 11. 分類サービスの作成 Jubatus hands-on #5 11 from jubakit.classifier import Classifier, Config config = Config(method=“AROW”, parameter={ “regularization_weight”: 0.1 }) classifier = Classifier.run(config) 設定を引数でダイレクトに定義して、Serviceを起動する
  • 12. 分類サービスの作成 Jubatus hands-on #5 12 from jubakit.classifier import Classifier, Config config = Config(method=“AROW”, parameter={ “regularization_weight”: 0.1 }) classifier = Classifier.run(config) JSONで記述していた設定を引数に渡す
  • 13. 分類サービスの作成 Jubatus hands-on #5 13 from jubakit.classifier import Classifier, Config config = Config(method=“AROW”, parameter={ “regularization_weight”: 0.1 }) Classifier = Classifier.run(config) Classifierサービスを起動する
  • 14. 学習?予測を行う Jubatus hands-on #5 14 for _ in classifier.train(dataset_train): pass y_true, y_pred = [], [] for (idx, label, result) in classifier.classify(dataset_test): y_true.append(label) y_pred.append(result[0][0]) 通常のJubatusと同様に、train/classifyを呼ぶ
  • 15. 学習?予測を行う Jubatus hands-on #5 15 for _ in classifier.train(dataset_train): pass y_true, y_pred = [], [] for (idx, label, result) in classifier.classify(dataset_test): y_true.append(label) y_pred.append(result[0][0]) 学習を行う (yieldなのでfor文を回す)
  • 16. 学習?予測を行う Jubatus hands-on #5 16 for _ in classifier.train(dataset_train): pass y_true, y_pred = [], [] for (idx, label, result) in classifier.classify(dataset_test): y_true.append(label) y_pred.append(result[0][0]) 予測結果を取得する 確信度の最も高いラベルを取るにはresult[0][0]
  • 17. 前回の Casual Talk からの変更点 ? 分析機能 の追加: ? Classifier, Anomaly, Recommender, Regression が利用可能 ? scikit-learn wrapper の追加: ? fit(X, y) や predict(X) など、お馴染みの API から Jubatus を利用可能 ? jubash:CLI を利用して対話的に Jubatus を利用できるツール ? コードを書くまでもないが、挙動確認をしたいときに便利 ? jubamodel:保存したモデルの設定変更ができるツール ? config の書き換え ? 近傍探索モデルのClassifierモデルとの相互変換、など Jubatus hands-on #5 17
  • 18. scikit-learn wrapper の使い方 Jubatus hands-on #5 18 from sklearn.metrics import classification_report from jubakit.wrapper.classifier import LinearClassifier clf = LinearClassifier(method=“AROW”, regularization_weight=0.1, embedded=False) clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print(classification_report(y_test, y_pred)) scikit-learn と同様のインターフェースで利用可能
  • 19. scikit-learn wrapper の使い方 Jubatus hands-on #5 19 from sklearn.metrics import classification_report from jubakit.wrapper.classifier import LinearClassifier clf = LinearClassifier(method=“AROW”, regularization_weight=0.1, embedded=False) clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print(classification_report(y_test, y_pred)) embeddedオプション:embedded_jubatusを使うか否か
  • 20. Embedded Jubatus ? jubatus_coreを直接叩ける Pythonモジュール ? jubatus_core: Jubatusの機械学習実装部 ? データ授受が高速なのでパラメータ調整などで役立つ ? クライアントを少し変えるだけで利用可能 Jubatus hands-on #5 20 from jubatus.classifier.client import Classifier classifier = Classifier(host, port, name) from jubatus.embedded import Classifier classifier = Classifier(‘config.json’) 設定ファイルのJSONを直接パスで指定するだけでOK 今まで embedded
  • 21. 本資料で話したこと ? Jubakit の紹介 ? Jubakit を使ってデフォルト判定をしてみる ? 前回の Casual Talk からの機能改善 ? scikit-learn wrapper の紹介 ? embedded jubatus の紹介 Jubatus hands-on #5 21