0
scikit-learnで始める機械学習
2013/7/16@はじパタLT
理論を勉強したら、やっぱり実践したい
理想
0から自分で実装したプログラムで課題を解決していく
現実
パッケージをつなぎ合わせて問題に取り組む
汎用性や処理速度を気にすると、パッケージを使うのが
現実的
→パッケージを使った機械学習の方法...
twitterID:wwacky
6月末で会社を辞めて無職生活中
8月からまたサラリーマンになります
最近Python、Hadoopを勉強中
今まではJava、Rがメイン
ゲーム・登山をやってます
登山はまだにわかですが
自己紹介
機械学習のパッケージ
R勢
 e1071(SVM、クラスタリングとか)
 gbm(AdaBoost+回帰など)
 kernlab(SVM、カーネル主成分とか)
 mboost(boosting)
 nnet(ニューラルネットワーク)
...
機械学習のパッケージ
R勢
 e1071(SVM、クラスタリングとか)
 gbm(AdaBoost+回帰など)
 kernlab(SVM、カーネル主成分とか)
 mboost(boosting)
 nnet(ニューラルネットワーク)
...
python用の機械学習ライブラリ(モジュール)
シンプルかつ効率的な多目的ツール(らしい)
pythonでデータ分析をする人の必須ツール(って聞いた)
ということで、気になってたので使ってみた
scikit-learnって何?
教師なし学習
 混合ガウスモデル
 主成分分析(9章)
 因子分析
 独立成分分析
 クラスタリング(10章)
 隠れマルコフモデル
etc.
教師あり学習
 最近傍法(5章)
 一般化線形モデル(6章)
 線形判別分析(6章...
教師なし学習
 混合ガウスモデル
 主成分分析(9章)
 因子分析
 独立成分分析
 クラスタリング(10章)
 隠れマルコフモデル
etc.
教師あり学習
 最近傍法(5章)
 一般化線形モデル(6章)
 線形判別分析(6章...
Webで検索してください(汗
まあ、そんなに説明することもないかと
Windows版
インストーラをダウンロードして実行するだけ
Mac版
MacPortsだとデフォルトでインストールされているPythonにイ
ンストールされるみた...
何はともあれデータセットがないと始まらない
データを準備する
Kaggleにscikit-learnのコンペがあったので、ここからデータをもらうことに
ここから
Download
ページに行ける
データの中身
0.29940251144353242,-1.2266241875260637,・・・
-1.1741758544222554,0.33215734209952552,・・・
1.1922220828945145,-0.41437...
Rと同じぐらいのコード量で動かせる
とりあえず動かす
import numpy as np
from sklearn import svm
trainFeature = np.genfromtxt(open(train.csv', 'r'),...
Rと同じぐらいのコード量で動かせる
とりあえず動かす
import numpy as np
from sklearn import svm
trainFeature = np.genfromtxt(open(train.csv', 'r'),...
Rと同じぐらいのコード量で動かせる
とりあえず動かす
import numpy as np
from sklearn import svm
trainFeature = np.genfromtxt(open(train.csv', 'r'),...
Rと同じぐらいのコード量で動かせる
とりあえず動かす
import numpy as np
from sklearn import svm
trainFeature = np.genfromtxt(open(train.csv', 'r'),...
Rと同じぐらいのコード量で動かせる
とりあえず動かす
import numpy as np
from sklearn import svm
trainFeature = np.genfromtxt(open(train.csv', 'r'),...
モデルを変える時は、定義部分を変更するだけ。後は一緒。
全モデル同じ方法かは調べてませんが・・・。
scikit-learnのいいところ①
from sklearn import svm
:
clf = svm.SVC()
clf.fit(...
クロスバリデーション、パラメータのグリッドサーチも簡単
scikit-learnのいいところ②
from sklearn import cross_validation
clf = svm.SVC()
scores = cross_valida...
0:00:00
0:01:26
0:02:53
0:04:19
0:05:46
0:07:12
0:08:38
指定なし 1 2 3 4 -1
処理時間[hh:mm:ss]
n_jobs
n_jobsを指定するだけで並列計算できるようになる
...
Kaggleにsubmitしてみた
∧,,∧
(;´・ω ・) うーん・・・ まだまだ修行が必要
/ ∽ /
しー-J
ひみつ
Upcoming SlideShare
Loading in...5
×

2013.07.15 はじパタlt scikit-learnで始める機械学習

11,217

Published on

はじめてのパターン認識の輪読会LTにて

0 Comments
38 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
11,217
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
100
Comments
0
Likes
38
Embeds 0
No embeds

No notes for slide

Transcript of "2013.07.15 はじパタlt scikit-learnで始める機械学習"

  1. 1. scikit-learnで始める機械学習 2013/7/16@はじパタLT
  2. 2. 理論を勉強したら、やっぱり実践したい 理想 0から自分で実装したプログラムで課題を解決していく 現実 パッケージをつなぎ合わせて問題に取り組む 汎用性や処理速度を気にすると、パッケージを使うのが 現実的 →パッケージを使った機械学習の方法を紹介 何の話?
  3. 3. twitterID:wwacky 6月末で会社を辞めて無職生活中 8月からまたサラリーマンになります 最近Python、Hadoopを勉強中 今まではJava、Rがメイン ゲーム・登山をやってます 登山はまだにわかですが 自己紹介
  4. 4. 機械学習のパッケージ R勢  e1071(SVM、クラスタリングとか)  gbm(AdaBoost+回帰など)  kernlab(SVM、カーネル主成分とか)  mboost(boosting)  nnet(ニューラルネットワーク)  randomForest  rpart etc. 定番  LIBSVM その他  weka (Java)  nltk (Python) 新興勢力  Apache Mahout  Jubatus  scikit-learn という勝手な印象
  5. 5. 機械学習のパッケージ R勢  e1071(SVM、クラスタリングとか)  gbm(AdaBoost+回帰など)  kernlab(SVM、カーネル主成分とか)  mboost(boosting)  nnet(ニューラルネットワーク)  randomForest  rpart etc. 定番  LIBSVM その他  weka (Java)  nltk (Python) 新興勢力  Apache Mahout  Jubatus  scikit-learn という勝手な印象 今日話すのはこいつ
  6. 6. python用の機械学習ライブラリ(モジュール) シンプルかつ効率的な多目的ツール(らしい) pythonでデータ分析をする人の必須ツール(って聞いた) ということで、気になってたので使ってみた scikit-learnって何?
  7. 7. 教師なし学習  混合ガウスモデル  主成分分析(9章)  因子分析  独立成分分析  クラスタリング(10章)  隠れマルコフモデル etc. 教師あり学習  最近傍法(5章)  一般化線形モデル(6章)  線形判別分析(6章)  SVM(8章)  決定木(11章)  ランダムフォレスト(11章)  Naïve Bayes etc. scikit-learnで何ができるの(抜粋) 周辺ツール  特徴抽出・作成  クロスバリデーション(2章)  グリッドサーチ  AUC、ROC描画(3章)  Accuracy、Recall、F値算出(3章) ()内の章は、はじめてのパターン認識で登場する章
  8. 8. 教師なし学習  混合ガウスモデル  主成分分析(9章)  因子分析  独立成分分析  クラスタリング(10章)  隠れマルコフモデル etc. 教師あり学習  最近傍法(5章)  一般化線形モデル(6章)  線形判別分析(6章)  SVM(8章)  決定木(11章)  ランダムフォレスト(11章)  Naïve Bayes etc. scikit-learnで何ができるの(抜粋) 周辺ツール  特徴抽出・作成  クロスバリデーション(2章)  グリッドサーチ  AUC、ROC描画(3章)  Accuracy、Recall、F値算出(3章) ()内の章は、はじめてのパターン認識で登場する章
  9. 9. Webで検索してください(汗 まあ、そんなに説明することもないかと Windows版 インストーラをダウンロードして実行するだけ Mac版 MacPortsだとデフォルトでインストールされているPythonにイ ンストールされるみたい 別にPythonをインストールしているならeasy_installかpipの方 がいいと思う インストールするには?
  10. 10. 何はともあれデータセットがないと始まらない データを準備する Kaggleにscikit-learnのコンペがあったので、ここからデータをもらうことに ここから Download ページに行ける
  11. 11. データの中身 0.29940251144353242,-1.2266241875260637,・・・ -1.1741758544222554,0.33215734209952552,・・・ 1.1922220828945145,-0.41437073477092423,・・・ 1.573270119628208,-0.58031780024933788,・・・ -0.61307141665395515,-0.64420413382117836,・・・ : 1 0 0 1 0 : ラベル 1000サンプル 特徴量 1000サンプル×40変数 Kaggleにデータの説明がないのが残念(本当は背景情報も欲しいところ) 1000行 40変数
  12. 12. Rと同じぐらいのコード量で動かせる とりあえず動かす import numpy as np from sklearn import svm trainFeature = np.genfromtxt(open(train.csv', 'r'), delimiter = ',') trainLabel = np.genfromtxt(open(trainLabels.csv', 'r'), delimiter = ',') clf = svm.SVC(kernel='rbf', C=1) clf.fit(trainFeature, trainLabel) testFeature = np.genfromtxt(open('test.csv', 'r'), delimiter = ',') result = clf.predict(testFeature)
  13. 13. Rと同じぐらいのコード量で動かせる とりあえず動かす import numpy as np from sklearn import svm trainFeature = np.genfromtxt(open(train.csv', 'r'), delimiter = ',') trainLabel = np.genfromtxt(open(trainLabels.csv', 'r'), delimiter = ',') clf = svm.SVC(kernel='rbf', C=1) clf.fit(trainFeature, trainLabel) testFeature = np.genfromtxt(open('test.csv', 'r'), delimiter = ',') result = clf.predict(testFeature) ライブラリの読み込み
  14. 14. Rと同じぐらいのコード量で動かせる とりあえず動かす import numpy as np from sklearn import svm trainFeature = np.genfromtxt(open(train.csv', 'r'), delimiter = ',') trainLabel = np.genfromtxt(open(trainLabels.csv', 'r'), delimiter = ',') clf = svm.SVC(kernel='rbf', C=1) clf.fit(trainFeature, trainLabel) testFeature = np.genfromtxt(open('test.csv', 'r'), delimiter = ',') result = clf.predict(testFeature) ファイルからデータを読み込む。 numpyのデータ形式に変換。
  15. 15. Rと同じぐらいのコード量で動かせる とりあえず動かす import numpy as np from sklearn import svm trainFeature = np.genfromtxt(open(train.csv', 'r'), delimiter = ',') trainLabel = np.genfromtxt(open(trainLabels.csv', 'r'), delimiter = ',') clf = svm.SVC(kernel='rbf', C=1) clf.fit(trainFeature, trainLabel) testFeature = np.genfromtxt(open('test.csv', 'r'), delimiter = ',') result = clf.predict(testFeature) モデルを定義(ここではSupport Vector Classifier) fit関数を使って教師データからパラメータを推定
  16. 16. Rと同じぐらいのコード量で動かせる とりあえず動かす import numpy as np from sklearn import svm trainFeature = np.genfromtxt(open(train.csv', 'r'), delimiter = ',') trainLabel = np.genfromtxt(open(trainLabels.csv', 'r'), delimiter = ',') clf = svm.SVC(kernel='rbf', C=1) clf.fit(trainFeature, trainLabel) testFeature = np.genfromtxt(open('test.csv', 'r'), delimiter = ',') result = clf.predict(testFeature) 判別したいデータの特徴量を読み込んで、 predict関数を使って判別
  17. 17. モデルを変える時は、定義部分を変更するだけ。後は一緒。 全モデル同じ方法かは調べてませんが・・・。 scikit-learnのいいところ① from sklearn import svm : clf = svm.SVC() clf.fit(trainFeature, trainLabel) : from sklearn import neighbors : clf = neighbors.KNeighborsClassifier() clf.fit(trainFeature, trainLabel) : from sklearn.ensemble import RandomForestClassifier : clf = RandomForestClassifier() clf.fit(trainFeature, trainLabel) : SVMの時 k近傍法の時 RandomForestの時 まあ、パラメータは把握した方がいいですが
  18. 18. クロスバリデーション、パラメータのグリッドサーチも簡単 scikit-learnのいいところ② from sklearn import cross_validation clf = svm.SVC() scores = cross_validation.cross_val_score(clf, trainFeature, trainLabel, cv=5, n_jobs=-1) print scores #結果表示 from sklearn.grid_search import GridSearchCV tuned_parameters = [ #グリッドサーチの探索範囲設定 {'C': [1, 10, 100, 1000], 'kernel': ['linear']}, {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, ] clf = GridSearchCV(svm.SVC(C=1), tuned_parameters, n_jobs = -1) #設定 clf.fit(trainFeature, trainLabel, cv=5) #グリッドサーチに使うデータの入力 print clf.best_estimator_ #パラメータが一番よかったモデルを表示 パラメータのグリッドサーチ クロスバリデーション クロスバリデーション、グリッドサーチは特徴量とラベルをnumpyの配列にしておかないとエラーになるので注意
  19. 19. 0:00:00 0:01:26 0:02:53 0:04:19 0:05:46 0:07:12 0:08:38 指定なし 1 2 3 4 -1 処理時間[hh:mm:ss] n_jobs n_jobsを指定するだけで並列計算できるようになる クロスバリデーション、グリッドサーチ以外にもランダムフォレ ストにも使える優れもの -1だとPCのコア数が自動設定される 並列計算も簡単、そうscikit-learnならね 4コアのMac Book Proで計測
  20. 20. Kaggleにsubmitしてみた ∧,,∧ (;´・ω ・) うーん・・・ まだまだ修行が必要 / ∽ / しー-J ひみつ
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×