Jubakit の紹介Kenichi Maehashi
Jubatus Casual Talks #4 June 18, 2016
INTRODUCTION TO JUBAKIT
Jubakit とは
▸ Jubatus を利⽤したデータ分析をもっと便利にする Python モジュール ▸ scikit-learn との連携や外部データソースの取り込みなど
が簡単に⾏える
▸ Python 2.6 以降, 3.2 以降をサポート ▸ Jubatus 0.8.0 以降で利⽤可能
INTRODUCTION TO JUBAKIT
モチベーション
▸ 機械学習を使⽤したデータ分析では、チューニングと精度測定を繰り返し⾏うことが⼀般的
▸ チューニングの要素は多岐に渡る ▸ データ前処理、特徴選択、特徴抽出、機械学習アルゴリズム、ハイパーパラメタ、…
様々なチューニングのバリエーションを 迅速に試⾏するためのフレームワークが必要
INTRODUCTION TO JUBAKIT
Jubakit のゴール
▸ データ分析の現場でよく⽤いられる scikit-learn の機能を Jubatus でも使えるようにすることで、チューニングフェーズの作業を加速する
▸ クロスバリデーションや精度指標の算出など、学習モデルの評価に役⽴つ機能
▸ 組み込みデータセットや⼈⼯データの⽣成など、Jubatus を使ってみる (動作を検証する) 際に役⽴つ機能
▸ Jubatus のアーキテクチャ (RPC 通信, プロセス起動, 設定ファイル, etc.) を隠蔽することで、チューニングに集中できる環境 (インタフェース) を提供する
INTRODUCTION TO JUBAKIT
Jubatus を使ったデータ分析: これまで
1. Jubatus サーバを起動
2. Jubatus クライアントを実⾏
3. 結果を集計して精度指標を算出
4. チューニングを⾏う ‣ Jubatus クライアントを修正
‣ Jubatus 設定ファイル (JSON) を修正
5. 最初に戻る
検証ごとにサーバの起動/終了が必要
精度指標の算出関数は別途実装が必要
データ前処理・特徴抽出のチューニング
アルゴリズム・ハイパーパラメタ・特徴抽出のチューニング
チューニング対象のファイルが複数あるため 記述が分散し、管理が⾯倒
RPC 接続のためのコードが必要
INTRODUCTION TO JUBAKIT
Jubatus を使ったデータ分析: Jubakit の場合
1. Jubakit を利⽤したスクリプトを実⾏ 2. 結果を集計して精度指標を算出 3. チューニングを⾏う ‣ スクリプトを修正
4. 最初に戻る すべてのチューニング要素が スクリプトに集約されるため
管理すべきファイルは 1 つだけ
Jubatus サーバの起動・終了は ⾃動的に⾏われる
精度指標の算出に scikit-learn 組み込みの関数を
直接活⽤できる
RPC を意識しない シンプルなコードで書ける
INTRODUCTION TO JUBAKIT
サンプルコード (CSV ファイルから異常検知)
dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)
Jubakit の設計コンセプト
シンプルなコードで動く: よく使う設定がデフォルト値として設定済み 空気を読む: データ型の⾃動推定を⾏う ⾼いカスタマイズ性: 細かい条件を指定することも可能
INTRODUCTION TO JUBAKIT
サンプルコード (CSV ファイルから異常検知)
dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)
CSV ファイルからデータセットを定義する
データの型は⾃動推定 (⼿動で指定することも可能)
INTRODUCTION TO JUBAKIT
サンプルコード (CSV ファイルから異常検知)
dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)
異常検知エンジンを起動
ハイパーパラメタは⾃動設定 (⼿動で指定することも可能)
INTRODUCTION TO JUBAKIT
サンプルコード (CSV ファイルから異常検知)
dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)
各レコードの異常度スコアを 算出して表⽰
INTRODUCTION TO JUBAKIT
Jubakit のアーキテクチャ
LOADER ローダ
DATASET データセット
SCHEMA スキーマ
SERVICE サービス
CONFIG 設定
CSV
RDBMS
様々なデータソースから 対象のデータを読み込む
ローダから読み込まれた 各データの型と意味を定義する
機械学習の機能を提供する (分類, 異常検知, ETC.)
NUMPY
SCIPY
サービスに必要な ハイパーパラメタを定義する
…
読み 込み
学習・ 分析
学習・分析の対象 となるデータを表す
(Estimator)
INTRODUCTION TO JUBAKIT
Loader - ローダ (1/2)
▸ よく使うデータ構造の Loader はビルトインクラス 機能
LineBasedStreamLoader / LineBasedFileLoader
⾏指向のストリーム/ファイルの読み込み
ArrayLoader / ZipArrayLoader
配列 (または NumPy Array) データの読み込み
SparseMatrixLoader SciPy 2-D 疎⾏列データの読み込み
CSVLoader CSV ファイルの読み込み
TwitterStreamLoader Twitter ストリームの読み込み
MergeChainLoader 複数の Loader のデータを結合して読み込み
ValueMapChainLoader 他の Loader の値を写像して読み込み
INTRODUCTION TO JUBAKIT
Loader - ローダ (2/2)
▸ 組み込みでサポートされていないデータソースを利⽤したい場合は、BaseLoader を継承したカスタム Loader クラスを実装する
▸ 実装はとても簡単. 1 レコードずつデータを yield する rows() メソッドを実装するだけ
‣ Loader から読み込まれたデータに対する後処理(窓処理など)を⾏いたい場合は、既存の Loader クラスを継承して preprocess() メソッドを実装する
INTRODUCTION TO JUBAKIT
Schema - スキーマ
▸ Loader から読み込まれた値の型と意味を定義する名前 型/意味
STRING ⽂字列データ
NUMBER 数値データ
BINARY バイナリデータ
LABEL 正解ラベル (Classifier のみ)
AUTOLoader から⼊⼒されたデータ型をそのまま使⽤する (CSV Loader の場合は全て⽂字列型になるため注意)
INFER データ型をデータの内容から⾃動推定する
IGNORE そのデータを無視する
INTRODUCTION TO JUBAKIT
Schema - スキーマの定義例
schema = Schema({
‘Category’: Schema.LABEL,
‘Title’: Schema.STRING,
‘Year’: Schema.NUMBER
}, Schema.IGNORE)
Category Title Year Country DirectorSF スターウォーズ Ep1 1999 USA G. Lucas
アニメ 千と千尋の神隠し 2001 Japan H. Miyazakiロマンス タイタニック 1997 USA J. Cameron
SF ターミネーター 1991 USA J. Cameron… … … … …
分類ラベル ⽂字列データ 数値データ 無視 無視
例: 映画データベース
フォールバック型 (明⽰的に指定されなかった すべてのデータ項⽬に対する定義)
INTRODUCTION TO JUBAKIT
Service - サービス
▸ Dataset を受け取って学習・分析を⾏い、結果を返却する ▸ scikit-learn の Estimator に相当 (ただし BaseEstimator は継承していません) ▸ 裏で Jubatus サーバが起動する
▸ 現在は Classifier (分類), Anomaly (異常検知), Weight (特徴抽出結果の表⽰) の 3 種類のサービスが提供されている
INTRODUCTION TO JUBAKIT
インストール
$ pip install jubakit
基本的な機能は jubakit だけでも利⽤できますが、 scikit-learn をインストールすることで、 精度算出などの⾼度な機能も利⽤できるようになります。
$ pip install numpy spicy scikit-learn
Jubakit のインストール
※Jubatus は別途インストールしておく必要があります。
※可能な場合は pip ではなくバイナリパッケージ (yum/apt-get) でのインストールをオススメします。
INTRODUCTION TO JUBAKIT
デモ: 実際にデータを分析してみよう
▸ Kaggle の Titanic サンプルを解いてみます
▸ https://www.kaggle.com/c/titanic
▸ https://github.com/kmaehashi/jubakit-tutorial-titanic
INTRODUCTION TO JUBAKIT
サンプルスクリプト集
▸ example ディレクトリにサンプルスクリプトがあります ▸ ⼀部のサンプルは要 scikit-learn
▸ デモ ▸ Twitter ストリームの分析
▸ ハイパーパラメタのバリエーション⾃動検証
INTRODUCTION TO JUBAKIT
プルリクお待ちしてます!
▸ Jubakit を使ったサンプルスクリプト ▸ カスタム Loader ▸ RDBMS とか MQ とか AWS SQS とか Kinesis とか
▸ 他の Service (Recommender, NN, …) への対応 ▸ etc.