SlideShare une entreprise Scribd logo
1  sur  32
2014/9/28 機械学習勉強会 RとPythonとJuliaで 機械学習レベル4を目指す 
@yutajuly
自己紹介 
Twitter: @yutajuly 
仕事: データ分析コンサル, 
データ分析ソフトウェア開発 
専門: ベイズ統計モデリング, 
マーケティングサイエンス 
最近の興味: ツールド東北2014で100km完走しました, 
GitHubを使いこなしたい, 
画像処理, 自然言語処理, データ可視化, 最適化, 
データ構造とアルゴリズム, IT 
2
機械学習初学者の理解レベル 
レベル4を目指すための機械学習の実践 
レベル1 
なんかビッグデータに関連して、精度よく分類するらしい 
レベル2 
Rで写経したらできたっぽいけど、正直意味不明 
レベル3 
RとかPythonとかでirisデータで学習とテストして精度見 る一連の流れ踏めるよ 
レベル4 
各種前処理を行って、スケーリングも、不均衡データ処理 にも対応して、パラメータ調整して、一連の流れ踏めるよ (けどアルゴリズムの数式は概念的にわかる程度) 
レベル5 
アルゴリズムも数式を理解した上で分析してるよ。時間さ えくれれば、ライブラリのないアルゴリズムもトップ会議 の論文見ながら実装出来るよ 
… 
… 
3 
http://d.hatena.ne.jp/shakezo/20130715/1373874047 
2013年7月15日 shakezoの日記 記事参考
レベル4を目指すと言っても 
たくさんのアルゴリズムがあって、 
たくさんのソフトウェアがあります。 
この場で全部についてレベル4を目指すのは困 難です。 
4
アルゴリズム 
Regression 
重回帰 
ラッソ回帰 
リッジ回帰 
Classification 
k近傍法, 決定木, SVM 
ロジスティック回帰 
Random Forest 
Clustering 
k-means 
階層クラスタリング 
混合正規分布 
Dimensional 
Reduction 
主成分分析 
因子分析 
多次元尺度構成法 
Model 
Estimation 
最尤推定 
EMアルゴリズム 
MCMC 
Sequential Analysis 
隠れマルコフモデル 
自己回帰モデル 
状態空間モデル 
x1 
x2 
x3 
z1 
z2 
z3 
5
時間の都合上、 
教師あり分類問題(Classification)に限り、 
また、代表的なアルゴリズムである 
Support Vector Machine(SVM)のみ扱います 
対象アルゴリズム 
6 
https://www.youtube.com/watch?v=3liCbRZPrZA 
SVM with polynomial kernel visualization
色々あるので、それぞれの特徴を把握して、自分の、 または、その時々の目的に適したものを使いたい 
Excel 
やってもクロス集計、相関、重回帰分析ぐらい。データ数も100万件とかだともうきつ い。 
R 
一般的なアルゴリズムは実装済み。日本語テキストも多くて、環境構築が簡単なので初 心者にオススメ。ただしあくまで解析用のソフトなので開発には向かない。あと計算が とても遅い 
Python 
Scikit-Learnで一般的な機械学習アルゴリズムはほぼ何でもできる。汎用言語なので、 解析も開発もできる。スクリプト言語だがRよりは早い 
Julia 
なんかRみたいに手軽に使えて、ちゃんと色々気を付けて書けば、Cとかのコンパイラ言 語並みに速い解析ソフト。ただし、まだ開発&更新中なので用途を選ぶ。あとドキュメ ントが無かったり、古かったりするので初心者には難しいかも 
Java 
本格的に解析を行うには、機械学習や確率分布のライブラリが薄いJavaだけでは辛い。 レベル5の人なら、計算も早いためオススメかも。 
C系 
ライブラリが弱いためか、あまり聞かない。レベル5の人なら計算も早いためオススメか も。 
Ruby 
ライブラリが弱いためか、あまり聞かない 
ソフトウェア 
ライブラリを活用して機械学習を行いたいのなら、 
現時点ではR, Python, Juliaを勧めます 
7
統計解析分野でのRの貢献 
統計の分野におけるオープンソースソフトウェ アのデファクトスタンダードは「R」という統 計言語+統合環境です 
2010年7月21日 @IT記事より 
http://www.atmarkit.co.jp/ait/articles/1007/21/news096.html 
Rは汎用のプログラミング言語 とはかなり異なり、統計解析や データ解析に特化している言語 です。データを統計解析で使い やすい形でメモリ上に展開し、 強力な統計解析関数で対話的、 探索的に分析を行い、手軽に高 品質なグラフィックスを作成し ます 
8
RからPythonに置き換わる? 
「データ・サイエンスのプログラミング言語は RからPythonに置き換わる」 
http://readwrite.jp/archives/2534 
2013年11月29日 readwrite.jp記事 
Pythonなら一つの言語で開発と 解析を行うことができる 
Rとは「統計のためのインタラクティ ブな環境」であり、厳密にはプログ ラミング言語ではない 
Pythonはデータ分析においては まだRに劣っているが、その差は 急速に縮まってきている 
numpy, scipy, Scikit-learn, pandas 
9
R, Pythonを凌駕するJulia? 
Why We Created Julia 
僕らが欲しい言語はこんな感じだ。まず、ゆるいライセンスの オープンソースで、Cの速度とRubyの動的さが欲しい。Lispのような真のマ クロが使える同図象性のある言語で、Matlabのように分かりやすい数学の記述をしたい。 Pythonのように汎用的に使いたいし、Rの統計処理、Perlの文字列処理、 Matlabの線形代数計算も要る。シェルのように簡単にいくつかのパーツをつなぎ合 わせたい。チョー簡単に習えて、超上級ハッカーも満足する言語。 インタラクティブに使えて、かつコンパイルできる言語が 欲しい。 
こんなにもワガママを言った上だけど、Hadoopみたいな大規模分散コン ピューティングもやりたい。もちろん、JavaとXMLで何キロバイトも 常套句を書きたくないし、数千台のマシンに分散した何ギガバイトものログファイ ルを読んでデバッグするなんて論外だ。幾層にも重なった複雑さを押しつけられるようなことなく、 純粋なパワーが欲しい。単純なスカラーのループを書いたら、一台のCPUのレジスターだけをブン 回す機械語のコードが生成されて欲しい。A*Bと書くだけで千の計算をそ れぞれ千のマシンに分散して実行して、巨大な行列の積を ポンと計算してもらいたい。(続く…) 
http://marui.hatenablog.com/entry/20120221/1329823079 
2012年2月21日 丸井総研記事より 
10
•解析+開発 
•プログラマ向け 
•RもPythonも包括で高速 
•開発途中なので、まだ使 いにくいか 
対象ソフトウェア 
11 
3種類の長所・短所を活かし、好みや用途により 使い分けたい 
•アドホック分析 
•入門者向け
10分後に目指すところ 
各言語で機械学習レベル4を目指す! 
Algorithm: 
Support Vector Machine 
Software: 
12
機械学習レベル4の手順 
問題設定: 
受信したメールに対して、スパム判定を行うための SVM分類器を構築する 
レベル4の手順: 
1.学習用データの取得 
2.前処理 
1.特徴抽出・選択 
2.ラベル付け 
3.データのスケーリング 
4.データ不均衡の処理 
3.パラメータ最適化 
交差検証による学習, テスト, 精度検証 
13
1. 学習用データの取得 
HP研が収集したSpam E-mail Database(Rのサンプルデータから取得して任意のフォルダに保存) 
メール数:4601通 
spam:1813通, non-spam:2788通 
spamは、製品やウェブサイトの広告,簡単に儲ける旨を謳うサイト, チェーンメール, アダルトなど 
non-spamは、仕事関係や個人のメールが対象。George(データ提供者の氏名)やエリアコードが含 まれている 
特徴量:単語や文字の出現頻度に関する57種類 
1〜48:変数名の出現頻度 
49〜54:記号文字の出現頻度である。 
55〜57:大文字の連なりの長さの平均, 最長, 合計を表す。 
58:ラベル(nonspam, spam) 
http://final-blue.blogspot.jp/2013/04/kernlabspam.html 
2013年4月8日さいごの碧ブログ記事 
14
2-1. 前処理:特徴抽出・選択 
1.特徴抽出・選択 
文句なしに最も重要 
spam or nonspamを閾値で分けれる1つの特徴量が見つか れば優れたアルゴリズムなど必要ない 
⇔どんなに優れたなアルゴリズムを使っても、分類に影響する特徴を 見ないと、分類できるはずがない 
みにくいアヒルの子の定理 
何らかの形で特徴に重要性を考えたり、取捨選択しなければ、みにく いアヒルの子と普通のアヒルの子の区別もできない。この定理は,特 徴選択や特徴抽出が識別やパターン認識にとって本質的であることを 示唆する 
Spam E-mail Databaseではこの作業は実施済み。本当の最初はメール そのものがあるだけ。自然言語処理などでメールに存在するあらゆる単 語を取ってきて、spamとの相関見て単語を絞ったり、非常に手間のか かる作業だったと想定される 
15
2-2. 前処理:ラベル付け 
2.ラベル付け 
ラベルは○×(spam or nonspam)のこと 
もちろんラベルは最初からあるわけではない 
そもそもラベルが常にあるのなら、そのラベルを見て分 類すればいいので、分類器なんていらない 
一部のデータにラベルを付けて、それ以外のデータ のラベルを予測する分類器を作りたい 
Spam E-mail Databaseではこの作業も実施済み。Georgeにヒ アリングを繰り返して、4601通のメール1つ1つにラベル付け を行ったと想定される 
16
1. 学習用データの取得 2-1. 前処理:特徴抽出・選択 2-2. 前処理:ラベル付け 
17 
svm.R 
svm.py 
svm.jl
2-3. 前処理:データのスケール調整 
3.データのスケール調整 
スケール調整とは 
全ての特徴量について、平均0, 分散1に揃える 
スケール調整が必要な理由 
取りうる値の範囲が特徴量により異なる場合、範囲 が大きい特徴量が、分類に対して支配的になりうる 
特徴量をひとつずつ見る木構造の分類器(決定木, Random Forest)では必要ない 
http://www.slideshare.net/sleepy_yoshi/svm-13435949 
【参照】SVM実践ガイド@sleepy_yoshi 
18
2-3. 前処理:データのスケール調整 
19 
svm.py 
svm.R 
svm.jl
2-4. 前処理:不均衡データ処理 
4.不均衡データ処理 
不均衡データとは 
10,000件のメールの内、spam10件、non-spam9,990件の場合、す べてnon-spamと判定しても、正解率99.9% 
正例と負例の比に偏りがある場合、アルゴリズムがいずれかに偏る判 定をしやすい学習をしてしまう 
不均衡データへの対処法 
1.少ない方を間違えた時のペナルティを、多い方を間違えた時より大 きくする 
Weighted SVM 
2.データ数を調整して正例数=負例数にする 
Over Sampling ⇐ 今回はコレだけ使います 
Under Sampling 
http://www.slideshare.net/sfchaos/ss-11307051 
【参考】不均衡データのクラス分類@sfchaos 
20
2-4. 前処理:不均衡データ処理 
21 
svm.R
22 
svm.py 
2-4. 前処理:不均衡データ処理
23 
svm.jl 
2-4. 前処理:不均衡データ処理
3. パラメータ最適化 
なんでパラメータ最適化が必要? 
各アルゴリズムはデータ依存のパラメータを持つ 
パラメータを調整して入れるか、適当に入れるかでは全然分類精 度が違うから必要 
⇒ ShouldではなくMust 
パラメータの最適化は、グリッドサーチ&交差検証で行う 
パラメータ候補値ごとに交差検証による学習と検証を行い、精度評価 
最も精度の良いものを、最適パラメータとする 
精度評価基準の決定 
混合行列 
Accuracy ⇐ 今回はコレだけ使います 
recall, precision 
ROC曲線, AUC 
*グリッドサーチ、クロスバリデーションの基本的な説明は、前々回の佐藤さんの資 料がわかりやすいので譲ります 
24
OUTPUT 
25 
svm.R 
3. パラメータ最適化
26 
svm.py 
OUTPUT 
3. パラメータ最適化
27 
svm.jl 
次ページに続く 
3. パラメータ最適化
28 
OUTPUT 
*MLBaseライブラリの関数を 使いこなせば、多分R, Python と同程度の長さで書けます 
https://github.com/JuliaStats/MLBase.jl 
svm.jl 
3. パラメータ最適化
[参考] JuliaのSVMパッケージについて 
Juliaでは現状2つのSVMパッケージが用意されている 
SVM.jl 
Pegasosアルゴリズムで双対問題 を解く実装 
LIBSVM.jl 
定番のLIBSVMの実装 
RもPythonもLIBSVM系 今回は、なぜか後者のLOADではまって抜 けられなかったこともあり、前者を使用 前者の利用については@chezou様のQiitaを参考にした http://qiita.com/chezou/items/03e648f04a2f9bbdb74b 
29 
http://www.ee.oulu.fi/research/imag/courses/Vedaldi/ShalevSiSr07.pdf
[参考] 開発環境 
Windows 64bit 
R 3.0.2 + Rstudio 0.97 
Python 2.7 + eclipse 4.4 
Julia 0.3.0 
Juliaパッケージのversion 
SVM :0.0.1 
MLBase :0.5.0 
DataFrames :0.5.7 
30
[参考] 参照webサイト 
2013年7月15日 shakezoの日記: 
http://d.hatena.ne.jp/shakezo/20130715/1373874047 
2010年7月21日 @IT記事: 
http://www.atmarkit.co.jp/ait/articles/1007/21/news096.html 
2013年11月29日 readwrite.jp記事: 
http://readwrite.jp/archives/2534 
2012年2月21日 丸井総研記事: 
http://marui.hatenablog.com/entry/20120221/1329823079 
2013年4月8日 さいごの碧ブログ記事: 
http://final-blue.blogspot.jp/2013/04/kernlabspam.html 
SVM実践ガイド@sleepy_yoshi : 
http://www.slideshare.net/sleepy_yoshi/svm-13435949 
不均衡データのクラス分類@sfchaos: 
http://www.slideshare.net/sfchaos/ss-11307051 
Qiita@chezou : 
http://qiita.com/chezou/items/03e648f04a2f9bbdb74b 
Pegasos: Primal Estimated sub-GrAdient SOlver for SVM: 
http://www.ee.oulu.fi/research/imag/courses/Vedaldi/ShalevSiSr07.pdf 
31
コードは拙いものですので、改良の余地はたく さんあります 
あとPythonについて、初学者向けということでpandasはあえ て使ってません 
昨日twitterアカウントつくりました。 
今友達1人なので, フォローしてください 
@yutajuly 
ご清聴ありがとうございました 
32 
おわりに

Contenu connexe

Tendances

Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Kohta Ishikawa
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門Kawamoto_Kazuhiko
 
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Preferred Networks
 
パターン認識と機械学習 §6.2 カーネル関数の構成
パターン認識と機械学習 §6.2 カーネル関数の構成パターン認識と機械学習 §6.2 カーネル関数の構成
パターン認識と機械学習 §6.2 カーネル関数の構成Prunus 1350
 
R による文書分類入門
R による文書分類入門R による文書分類入門
R による文書分類入門Takeshi Arabiki
 
統計学勉強会#2
統計学勉強会#2統計学勉強会#2
統計学勉強会#2Hidehisa Arai
 
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?jundoll
 
Rでコンジョイント分析
Rでコンジョイント分析Rでコンジョイント分析
Rでコンジョイント分析osamu morimoto
 
社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森Masashi Komori
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Yohei Sato
 
Prophet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツールProphet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツールhoxo_m
 
Rのオブジェクト
RのオブジェクトRのオブジェクト
RのオブジェクトItoshi Nikaido
 
離散時間ロジスティック回帰モデル解説
離散時間ロジスティック回帰モデル解説離散時間ロジスティック回帰モデル解説
離散時間ロジスティック回帰モデル解説akira_11
 
ロジスティック回帰分析の書き方
ロジスティック回帰分析の書き方ロジスティック回帰分析の書き方
ロジスティック回帰分析の書き方Sayuri Shimizu
 
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnetNagi Teramo
 
ベイズファクターとモデル選択
ベイズファクターとモデル選択ベイズファクターとモデル選択
ベイズファクターとモデル選択kazutantan
 

Tendances (20)

Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
 
パターン認識と機械学習 §6.2 カーネル関数の構成
パターン認識と機械学習 §6.2 カーネル関数の構成パターン認識と機械学習 §6.2 カーネル関数の構成
パターン認識と機械学習 §6.2 カーネル関数の構成
 
Rcppのすすめ
RcppのすすめRcppのすすめ
Rcppのすすめ
 
R による文書分類入門
R による文書分類入門R による文書分類入門
R による文書分類入門
 
統計学勉強会#2
統計学勉強会#2統計学勉強会#2
統計学勉強会#2
 
PRML 第4章
PRML 第4章PRML 第4章
PRML 第4章
 
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?
 
Rでコンジョイント分析
Rでコンジョイント分析Rでコンジョイント分析
Rでコンジョイント分析
 
社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森社会心理学者のための時系列分析入門_小森
社会心理学者のための時系列分析入門_小森
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)
 
Prophet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツールProphet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツール
 
Rのオブジェクト
RのオブジェクトRのオブジェクト
Rのオブジェクト
 
MICの解説
MICの解説MICの解説
MICの解説
 
離散時間ロジスティック回帰モデル解説
離散時間ロジスティック回帰モデル解説離散時間ロジスティック回帰モデル解説
離散時間ロジスティック回帰モデル解説
 
ロジスティック回帰分析の書き方
ロジスティック回帰分析の書き方ロジスティック回帰分析の書き方
ロジスティック回帰分析の書き方
 
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
 
ベイズファクターとモデル選択
ベイズファクターとモデル選択ベイズファクターとモデル選択
ベイズファクターとモデル選択
 
PRML8章
PRML8章PRML8章
PRML8章
 

Dernier

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 

Dernier (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Rとpythonとjuliaで機械学習レベル4を目指す

  • 1. 2014/9/28 機械学習勉強会 RとPythonとJuliaで 機械学習レベル4を目指す @yutajuly
  • 2. 自己紹介 Twitter: @yutajuly 仕事: データ分析コンサル, データ分析ソフトウェア開発 専門: ベイズ統計モデリング, マーケティングサイエンス 最近の興味: ツールド東北2014で100km完走しました, GitHubを使いこなしたい, 画像処理, 自然言語処理, データ可視化, 最適化, データ構造とアルゴリズム, IT 2
  • 3. 機械学習初学者の理解レベル レベル4を目指すための機械学習の実践 レベル1 なんかビッグデータに関連して、精度よく分類するらしい レベル2 Rで写経したらできたっぽいけど、正直意味不明 レベル3 RとかPythonとかでirisデータで学習とテストして精度見 る一連の流れ踏めるよ レベル4 各種前処理を行って、スケーリングも、不均衡データ処理 にも対応して、パラメータ調整して、一連の流れ踏めるよ (けどアルゴリズムの数式は概念的にわかる程度) レベル5 アルゴリズムも数式を理解した上で分析してるよ。時間さ えくれれば、ライブラリのないアルゴリズムもトップ会議 の論文見ながら実装出来るよ … … 3 http://d.hatena.ne.jp/shakezo/20130715/1373874047 2013年7月15日 shakezoの日記 記事参考
  • 5. アルゴリズム Regression 重回帰 ラッソ回帰 リッジ回帰 Classification k近傍法, 決定木, SVM ロジスティック回帰 Random Forest Clustering k-means 階層クラスタリング 混合正規分布 Dimensional Reduction 主成分分析 因子分析 多次元尺度構成法 Model Estimation 最尤推定 EMアルゴリズム MCMC Sequential Analysis 隠れマルコフモデル 自己回帰モデル 状態空間モデル x1 x2 x3 z1 z2 z3 5
  • 6. 時間の都合上、 教師あり分類問題(Classification)に限り、 また、代表的なアルゴリズムである Support Vector Machine(SVM)のみ扱います 対象アルゴリズム 6 https://www.youtube.com/watch?v=3liCbRZPrZA SVM with polynomial kernel visualization
  • 7. 色々あるので、それぞれの特徴を把握して、自分の、 または、その時々の目的に適したものを使いたい Excel やってもクロス集計、相関、重回帰分析ぐらい。データ数も100万件とかだともうきつ い。 R 一般的なアルゴリズムは実装済み。日本語テキストも多くて、環境構築が簡単なので初 心者にオススメ。ただしあくまで解析用のソフトなので開発には向かない。あと計算が とても遅い Python Scikit-Learnで一般的な機械学習アルゴリズムはほぼ何でもできる。汎用言語なので、 解析も開発もできる。スクリプト言語だがRよりは早い Julia なんかRみたいに手軽に使えて、ちゃんと色々気を付けて書けば、Cとかのコンパイラ言 語並みに速い解析ソフト。ただし、まだ開発&更新中なので用途を選ぶ。あとドキュメ ントが無かったり、古かったりするので初心者には難しいかも Java 本格的に解析を行うには、機械学習や確率分布のライブラリが薄いJavaだけでは辛い。 レベル5の人なら、計算も早いためオススメかも。 C系 ライブラリが弱いためか、あまり聞かない。レベル5の人なら計算も早いためオススメか も。 Ruby ライブラリが弱いためか、あまり聞かない ソフトウェア ライブラリを活用して機械学習を行いたいのなら、 現時点ではR, Python, Juliaを勧めます 7
  • 8. 統計解析分野でのRの貢献 統計の分野におけるオープンソースソフトウェ アのデファクトスタンダードは「R」という統 計言語+統合環境です 2010年7月21日 @IT記事より http://www.atmarkit.co.jp/ait/articles/1007/21/news096.html Rは汎用のプログラミング言語 とはかなり異なり、統計解析や データ解析に特化している言語 です。データを統計解析で使い やすい形でメモリ上に展開し、 強力な統計解析関数で対話的、 探索的に分析を行い、手軽に高 品質なグラフィックスを作成し ます 8
  • 9. RからPythonに置き換わる? 「データ・サイエンスのプログラミング言語は RからPythonに置き換わる」 http://readwrite.jp/archives/2534 2013年11月29日 readwrite.jp記事 Pythonなら一つの言語で開発と 解析を行うことができる Rとは「統計のためのインタラクティ ブな環境」であり、厳密にはプログ ラミング言語ではない Pythonはデータ分析においては まだRに劣っているが、その差は 急速に縮まってきている numpy, scipy, Scikit-learn, pandas 9
  • 10. R, Pythonを凌駕するJulia? Why We Created Julia 僕らが欲しい言語はこんな感じだ。まず、ゆるいライセンスの オープンソースで、Cの速度とRubyの動的さが欲しい。Lispのような真のマ クロが使える同図象性のある言語で、Matlabのように分かりやすい数学の記述をしたい。 Pythonのように汎用的に使いたいし、Rの統計処理、Perlの文字列処理、 Matlabの線形代数計算も要る。シェルのように簡単にいくつかのパーツをつなぎ合 わせたい。チョー簡単に習えて、超上級ハッカーも満足する言語。 インタラクティブに使えて、かつコンパイルできる言語が 欲しい。 こんなにもワガママを言った上だけど、Hadoopみたいな大規模分散コン ピューティングもやりたい。もちろん、JavaとXMLで何キロバイトも 常套句を書きたくないし、数千台のマシンに分散した何ギガバイトものログファイ ルを読んでデバッグするなんて論外だ。幾層にも重なった複雑さを押しつけられるようなことなく、 純粋なパワーが欲しい。単純なスカラーのループを書いたら、一台のCPUのレジスターだけをブン 回す機械語のコードが生成されて欲しい。A*Bと書くだけで千の計算をそ れぞれ千のマシンに分散して実行して、巨大な行列の積を ポンと計算してもらいたい。(続く…) http://marui.hatenablog.com/entry/20120221/1329823079 2012年2月21日 丸井総研記事より 10
  • 11. •解析+開発 •プログラマ向け •RもPythonも包括で高速 •開発途中なので、まだ使 いにくいか 対象ソフトウェア 11 3種類の長所・短所を活かし、好みや用途により 使い分けたい •アドホック分析 •入門者向け
  • 13. 機械学習レベル4の手順 問題設定: 受信したメールに対して、スパム判定を行うための SVM分類器を構築する レベル4の手順: 1.学習用データの取得 2.前処理 1.特徴抽出・選択 2.ラベル付け 3.データのスケーリング 4.データ不均衡の処理 3.パラメータ最適化 交差検証による学習, テスト, 精度検証 13
  • 14. 1. 学習用データの取得 HP研が収集したSpam E-mail Database(Rのサンプルデータから取得して任意のフォルダに保存) メール数:4601通 spam:1813通, non-spam:2788通 spamは、製品やウェブサイトの広告,簡単に儲ける旨を謳うサイト, チェーンメール, アダルトなど non-spamは、仕事関係や個人のメールが対象。George(データ提供者の氏名)やエリアコードが含 まれている 特徴量:単語や文字の出現頻度に関する57種類 1〜48:変数名の出現頻度 49〜54:記号文字の出現頻度である。 55〜57:大文字の連なりの長さの平均, 最長, 合計を表す。 58:ラベル(nonspam, spam) http://final-blue.blogspot.jp/2013/04/kernlabspam.html 2013年4月8日さいごの碧ブログ記事 14
  • 15. 2-1. 前処理:特徴抽出・選択 1.特徴抽出・選択 文句なしに最も重要 spam or nonspamを閾値で分けれる1つの特徴量が見つか れば優れたアルゴリズムなど必要ない ⇔どんなに優れたなアルゴリズムを使っても、分類に影響する特徴を 見ないと、分類できるはずがない みにくいアヒルの子の定理 何らかの形で特徴に重要性を考えたり、取捨選択しなければ、みにく いアヒルの子と普通のアヒルの子の区別もできない。この定理は,特 徴選択や特徴抽出が識別やパターン認識にとって本質的であることを 示唆する Spam E-mail Databaseではこの作業は実施済み。本当の最初はメール そのものがあるだけ。自然言語処理などでメールに存在するあらゆる単 語を取ってきて、spamとの相関見て単語を絞ったり、非常に手間のか かる作業だったと想定される 15
  • 16. 2-2. 前処理:ラベル付け 2.ラベル付け ラベルは○×(spam or nonspam)のこと もちろんラベルは最初からあるわけではない そもそもラベルが常にあるのなら、そのラベルを見て分 類すればいいので、分類器なんていらない 一部のデータにラベルを付けて、それ以外のデータ のラベルを予測する分類器を作りたい Spam E-mail Databaseではこの作業も実施済み。Georgeにヒ アリングを繰り返して、4601通のメール1つ1つにラベル付け を行ったと想定される 16
  • 17. 1. 学習用データの取得 2-1. 前処理:特徴抽出・選択 2-2. 前処理:ラベル付け 17 svm.R svm.py svm.jl
  • 18. 2-3. 前処理:データのスケール調整 3.データのスケール調整 スケール調整とは 全ての特徴量について、平均0, 分散1に揃える スケール調整が必要な理由 取りうる値の範囲が特徴量により異なる場合、範囲 が大きい特徴量が、分類に対して支配的になりうる 特徴量をひとつずつ見る木構造の分類器(決定木, Random Forest)では必要ない http://www.slideshare.net/sleepy_yoshi/svm-13435949 【参照】SVM実践ガイド@sleepy_yoshi 18
  • 20. 2-4. 前処理:不均衡データ処理 4.不均衡データ処理 不均衡データとは 10,000件のメールの内、spam10件、non-spam9,990件の場合、す べてnon-spamと判定しても、正解率99.9% 正例と負例の比に偏りがある場合、アルゴリズムがいずれかに偏る判 定をしやすい学習をしてしまう 不均衡データへの対処法 1.少ない方を間違えた時のペナルティを、多い方を間違えた時より大 きくする Weighted SVM 2.データ数を調整して正例数=負例数にする Over Sampling ⇐ 今回はコレだけ使います Under Sampling http://www.slideshare.net/sfchaos/ss-11307051 【参考】不均衡データのクラス分類@sfchaos 20
  • 22. 22 svm.py 2-4. 前処理:不均衡データ処理
  • 23. 23 svm.jl 2-4. 前処理:不均衡データ処理
  • 24. 3. パラメータ最適化 なんでパラメータ最適化が必要? 各アルゴリズムはデータ依存のパラメータを持つ パラメータを調整して入れるか、適当に入れるかでは全然分類精 度が違うから必要 ⇒ ShouldではなくMust パラメータの最適化は、グリッドサーチ&交差検証で行う パラメータ候補値ごとに交差検証による学習と検証を行い、精度評価 最も精度の良いものを、最適パラメータとする 精度評価基準の決定 混合行列 Accuracy ⇐ 今回はコレだけ使います recall, precision ROC曲線, AUC *グリッドサーチ、クロスバリデーションの基本的な説明は、前々回の佐藤さんの資 料がわかりやすいので譲ります 24
  • 25. OUTPUT 25 svm.R 3. パラメータ最適化
  • 26. 26 svm.py OUTPUT 3. パラメータ最適化
  • 27. 27 svm.jl 次ページに続く 3. パラメータ最適化
  • 28. 28 OUTPUT *MLBaseライブラリの関数を 使いこなせば、多分R, Python と同程度の長さで書けます https://github.com/JuliaStats/MLBase.jl svm.jl 3. パラメータ最適化
  • 29. [参考] JuliaのSVMパッケージについて Juliaでは現状2つのSVMパッケージが用意されている SVM.jl Pegasosアルゴリズムで双対問題 を解く実装 LIBSVM.jl 定番のLIBSVMの実装 RもPythonもLIBSVM系 今回は、なぜか後者のLOADではまって抜 けられなかったこともあり、前者を使用 前者の利用については@chezou様のQiitaを参考にした http://qiita.com/chezou/items/03e648f04a2f9bbdb74b 29 http://www.ee.oulu.fi/research/imag/courses/Vedaldi/ShalevSiSr07.pdf
  • 30. [参考] 開発環境 Windows 64bit R 3.0.2 + Rstudio 0.97 Python 2.7 + eclipse 4.4 Julia 0.3.0 Juliaパッケージのversion SVM :0.0.1 MLBase :0.5.0 DataFrames :0.5.7 30
  • 31. [参考] 参照webサイト 2013年7月15日 shakezoの日記: http://d.hatena.ne.jp/shakezo/20130715/1373874047 2010年7月21日 @IT記事: http://www.atmarkit.co.jp/ait/articles/1007/21/news096.html 2013年11月29日 readwrite.jp記事: http://readwrite.jp/archives/2534 2012年2月21日 丸井総研記事: http://marui.hatenablog.com/entry/20120221/1329823079 2013年4月8日 さいごの碧ブログ記事: http://final-blue.blogspot.jp/2013/04/kernlabspam.html SVM実践ガイド@sleepy_yoshi : http://www.slideshare.net/sleepy_yoshi/svm-13435949 不均衡データのクラス分類@sfchaos: http://www.slideshare.net/sfchaos/ss-11307051 Qiita@chezou : http://qiita.com/chezou/items/03e648f04a2f9bbdb74b Pegasos: Primal Estimated sub-GrAdient SOlver for SVM: http://www.ee.oulu.fi/research/imag/courses/Vedaldi/ShalevSiSr07.pdf 31
  • 32. コードは拙いものですので、改良の余地はたく さんあります あとPythonについて、初学者向けということでpandasはあえ て使ってません 昨日twitterアカウントつくりました。 今友達1人なので, フォローしてください @yutajuly ご清聴ありがとうございました 32 おわりに