Advertisement
Advertisement

More Related Content

Slideshows for you(20)

Advertisement

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の日記 記事参考
  4. レベル4を目指すと言っても たくさんのアルゴリズムがあって、 たくさんのソフトウェアがあります。 この場で全部についてレベル4を目指すのは困 難です。 4
  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種類の長所・短所を活かし、好みや用途により 使い分けたい •アドホック分析 •入門者向け
  12. 10分後に目指すところ 各言語で機械学習レベル4を目指す! Algorithm: Support Vector Machine Software: 12
  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
  19. 2-3. 前処理:データのスケール調整 19 svm.py svm.R svm.jl
  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
  21. 2-4. 前処理:不均衡データ処理 21 svm.R
  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 おわりに
Advertisement