Submit Search
2013.07.15 はじパタlt scikit-learnで始める機械学習
•
44 likes
•
23,409 views
Motoya Wakiyama
Follow
はじめてのパターン認識の輪読会LTにて
Read less
Read more
1 of 20
Download now
Downloaded 134 times
More Related Content
2013.07.15 はじパタlt scikit-learnで始める機械学習
1.
scikit-learnで始める機械学習 2013/7/16@はじパタLT
2.
理論を勉強したら、やっぱり実践したい 理想 0から自分で実装したプログラムで課題を解決していく 現実 パッケージをつなぎ合わせて問題に取り組む 汎用性や処理速度を気にすると、パッケージを使うのが 現実的 →パッケージを使った機械学習の方法を紹介 何の話?
3.
twitterID:wwacky 6月末で会社を辞めて無職生活中 8月からまたサラリーマンになります 最近Python、Hadoopを勉強中 今まではJava、Rがメイン ゲーム・登山をやってます 登山はまだにわかですが 自己紹介
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.
機械学習のパッケージ R勢 e1071(SVM、クラスタリングとか) gbm(AdaBoost+回帰など)
kernlab(SVM、カーネル主成分とか) mboost(boosting) nnet(ニューラルネットワーク) randomForest rpart etc. 定番 LIBSVM その他 weka (Java) nltk (Python) 新興勢力 Apache Mahout Jubatus scikit-learn という勝手な印象 今日話すのはこいつ
6.
python用の機械学習ライブラリ(モジュール) シンプルかつ効率的な多目的ツール(らしい) pythonでデータ分析をする人の必須ツール(って聞いた) ということで、気になってたので使ってみた scikit-learnって何?
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.
教師なし学習 混合ガウスモデル 主成分分析(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.
Webで検索してください(汗 まあ、そんなに説明することもないかと Windows版 インストーラをダウンロードして実行するだけ Mac版 MacPortsだとデフォルトでインストールされているPythonにイ ンストールされるみたい 別にPythonをインストールしているならeasy_installかpipの方 がいいと思う インストールするには?
10.
何はともあれデータセットがないと始まらない データを準備する Kaggleにscikit-learnのコンペがあったので、ここからデータをもらうことに ここから Download ページに行ける
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.
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.
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.
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.
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.
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.
モデルを変える時は、定義部分を変更するだけ。後は一緒。 全モデル同じ方法かは調べてませんが・・・。 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.
クロスバリデーション、パラメータのグリッドサーチも簡単 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.
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.
Kaggleにsubmitしてみた ∧,,∧ (;´・ω ・) うーん・・・
まだまだ修行が必要 / ∽ / しー-J ひみつ
Download