jubakit の紹介

20
Jubakit の紹介 Kenichi Maehashi Jubatus Casual Talks #4 June 18, 2016

Upload: kmaehashi

Post on 13-Jan-2017

5.681 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: Jubakit の紹介

Jubakit の紹介Kenichi Maehashi

Jubatus Casual Talks #4 June 18, 2016

Page 2: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Jubakit とは

▸ Jubatus を利⽤したデータ分析をもっと便利にする Python モジュール ▸ scikit-learn との連携や外部データソースの取り込みなど

が簡単に⾏える

▸ Python 2.6 以降, 3.2 以降をサポート ▸ Jubatus 0.8.0 以降で利⽤可能

Page 3: Jubakit の紹介

INTRODUCTION TO JUBAKIT

モチベーション

▸ 機械学習を使⽤したデータ分析では、チューニングと精度測定を繰り返し⾏うことが⼀般的

▸ チューニングの要素は多岐に渡る ▸ データ前処理、特徴選択、特徴抽出、機械学習アルゴリズム、ハイパーパラメタ、…

様々なチューニングのバリエーションを 迅速に試⾏するためのフレームワークが必要

Page 4: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Jubakit のゴール

▸ データ分析の現場でよく⽤いられる scikit-learn の機能を Jubatus でも使えるようにすることで、チューニングフェーズの作業を加速する

▸ クロスバリデーションや精度指標の算出など、学習モデルの評価に役⽴つ機能

▸ 組み込みデータセットや⼈⼯データの⽣成など、Jubatus を使ってみる (動作を検証する) 際に役⽴つ機能

▸ Jubatus のアーキテクチャ (RPC 通信, プロセス起動, 設定ファイル, etc.) を隠蔽することで、チューニングに集中できる環境 (インタフェース) を提供する

Page 5: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Jubatus を使ったデータ分析: これまで

1. Jubatus サーバを起動

2. Jubatus クライアントを実⾏

3. 結果を集計して精度指標を算出

4. チューニングを⾏う ‣ Jubatus クライアントを修正

‣ Jubatus 設定ファイル (JSON) を修正

5. 最初に戻る

検証ごとにサーバの起動/終了が必要

精度指標の算出関数は別途実装が必要

データ前処理・特徴抽出のチューニング

アルゴリズム・ハイパーパラメタ・特徴抽出のチューニング

チューニング対象のファイルが複数あるため 記述が分散し、管理が⾯倒

RPC 接続のためのコードが必要

Page 6: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Jubatus を使ったデータ分析: Jubakit の場合

1. Jubakit を利⽤したスクリプトを実⾏ 2. 結果を集計して精度指標を算出 3. チューニングを⾏う ‣ スクリプトを修正

4. 最初に戻る すべてのチューニング要素が スクリプトに集約されるため

管理すべきファイルは 1 つだけ

Jubatus サーバの起動・終了は ⾃動的に⾏われる

精度指標の算出に scikit-learn 組み込みの関数を

直接活⽤できる

RPC を意識しない シンプルなコードで書ける

Page 7: Jubakit の紹介

INTRODUCTION TO JUBAKIT

サンプルコード (CSV ファイルから異常検知)

dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)

Jubakit の設計コンセプト

シンプルなコードで動く: よく使う設定がデフォルト値として設定済み 空気を読む: データ型の⾃動推定を⾏う ⾼いカスタマイズ性: 細かい条件を指定することも可能

Page 8: Jubakit の紹介

INTRODUCTION TO JUBAKIT

サンプルコード (CSV ファイルから異常検知)

dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)

CSV ファイルからデータセットを定義する

データの型は⾃動推定 (⼿動で指定することも可能)

Page 9: Jubakit の紹介

INTRODUCTION TO JUBAKIT

サンプルコード (CSV ファイルから異常検知)

dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)

異常検知エンジンを起動

ハイパーパラメタは⾃動設定 (⼿動で指定することも可能)

Page 10: Jubakit の紹介

INTRODUCTION TO JUBAKIT

サンプルコード (CSV ファイルから異常検知)

dataset=Dataset(CSVLoader(“dataset.csv”))service=Anomaly.run(Config())forresultinservice.add(dataset):print(result)

各レコードの異常度スコアを 算出して表⽰

Page 11: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Jubakit のアーキテクチャ

LOADER ローダ

DATASET データセット

SCHEMA スキーマ

SERVICE サービス

CONFIG 設定

CSV

RDBMS

TWITTER

様々なデータソースから 対象のデータを読み込む

ローダから読み込まれた 各データの型と意味を定義する

機械学習の機能を提供する (分類, 異常検知, ETC.)

NUMPY

SCIPY

サービスに必要な ハイパーパラメタを定義する

読み 込み

学習・ 分析

学習・分析の対象 となるデータを表す

(Estimator)

Page 12: Jubakit の紹介

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 の値を写像して読み込み

Page 13: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Loader - ローダ (2/2)

▸ 組み込みでサポートされていないデータソースを利⽤したい場合は、BaseLoader を継承したカスタム Loader クラスを実装する

▸ 実装はとても簡単. 1 レコードずつデータを yield する rows() メソッドを実装するだけ

‣ Loader から読み込まれたデータに対する後処理(窓処理など)を⾏いたい場合は、既存の Loader クラスを継承して preprocess() メソッドを実装する

Page 14: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Schema - スキーマ

▸ Loader から読み込まれた値の型と意味を定義する名前 型/意味

STRING ⽂字列データ

NUMBER 数値データ

BINARY バイナリデータ

LABEL 正解ラベル (Classifier のみ)

AUTOLoader から⼊⼒されたデータ型をそのまま使⽤する (CSV Loader の場合は全て⽂字列型になるため注意)

INFER データ型をデータの内容から⾃動推定する

IGNORE そのデータを無視する

Page 15: Jubakit の紹介

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… … … … …

分類ラベル ⽂字列データ 数値データ 無視 無視

例: 映画データベース

フォールバック型 (明⽰的に指定されなかった  すべてのデータ項⽬に対する定義)

Page 16: Jubakit の紹介

INTRODUCTION TO JUBAKIT

Service - サービス

▸ Dataset を受け取って学習・分析を⾏い、結果を返却する ▸ scikit-learn の Estimator に相当 (ただし BaseEstimator は継承していません) ▸ 裏で Jubatus サーバが起動する

▸ 現在は Classifier (分類), Anomaly (異常検知), Weight (特徴抽出結果の表⽰) の 3 種類のサービスが提供されている

Page 17: Jubakit の紹介

INTRODUCTION TO JUBAKIT

インストール

$ pip install jubakit

基本的な機能は jubakit だけでも利⽤できますが、 scikit-learn をインストールすることで、 精度算出などの⾼度な機能も利⽤できるようになります。

$ pip install numpy spicy scikit-learn

Jubakit のインストール

※Jubatus は別途インストールしておく必要があります。

※可能な場合は pip ではなくバイナリパッケージ (yum/apt-get)  でのインストールをオススメします。

Page 18: Jubakit の紹介

INTRODUCTION TO JUBAKIT

デモ: 実際にデータを分析してみよう

▸ Kaggle の Titanic サンプルを解いてみます

▸ https://www.kaggle.com/c/titanic

▸ https://github.com/kmaehashi/jubakit-tutorial-titanic

Page 19: Jubakit の紹介

INTRODUCTION TO JUBAKIT

サンプルスクリプト集

▸ example ディレクトリにサンプルスクリプトがあります ▸ ⼀部のサンプルは要 scikit-learn

▸ デモ ▸ Twitter ストリームの分析

▸ ハイパーパラメタのバリエーション⾃動検証

Page 20: Jubakit の紹介

INTRODUCTION TO JUBAKIT

プルリクお待ちしてます!

▸ Jubakit を使ったサンプルスクリプト ▸ カスタム Loader ▸ RDBMS とか MQ とか AWS SQS とか Kinesis とか

▸ 他の Service (Recommender, NN, …) への対応 ▸ etc.