More Related Content
Similar to 2013.07.15 はじパタlt scikit-learnで始める機械学習
Similar to 2013.07.15 はじパタlt scikit-learnで始める機械学習(20)
More from Motoya Wakiyama
More from Motoya Wakiyama(8)
2013.07.15 はじパタlt 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章)
()内の章は、はじめてのパターン認識で登場する章
- 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関数を使って判別
- 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の配列にしておかないとエラーになるので注意