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
• https://www.slideshare.net/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

Jubakitの解説

  • 1.
  • 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 •https://www.slideshare.net/kmaehashi/jubakit-63202847 • http://jubat.us/ja/jubakit/ Jubatus hands-on #5 4
  • 5.
  • 6.
    デフォルト判定をJubakitで行う Jubatus hands-on #56 1. CSVLoader を利用してデータセットを読み込む 2. 分類サービスを起動して、学習と予測を行う
  • 7.
    データセットの読み込み Jubatus hands-on #57 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 #58 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 #59 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 #510 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 #511 from jubakit.classifier import Classifier, Config config = Config(method=“AROW”, parameter={ “regularization_weight”: 0.1 }) classifier = Classifier.run(config) 設定を引数でダイレクトに定義して、Serviceを起動する
  • 12.
    分類サービスの作成 Jubatus hands-on #512 from jubakit.classifier import Classifier, Config config = Config(method=“AROW”, parameter={ “regularization_weight”: 0.1 }) classifier = Classifier.run(config) JSONで記述していた設定を引数に渡す
  • 13.
    分類サービスの作成 Jubatus hands-on #513 from jubakit.classifier import Classifier, Config config = Config(method=“AROW”, parameter={ “regularization_weight”: 0.1 }) Classifier = Classifier.run(config) Classifierサービスを起動する
  • 14.
    学習・予測を行う Jubatus hands-on #514 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 #515 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 #516 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 の使い方 Jubatushands-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 の使い方 Jubatushands-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
  • 22.