scikit-learnのSVMでクロスバリデーション
scikit-learnのSVMでクロスバリデーションするサンプルです。5-foldの場合。
StratifiedKFoldに正解ラベルを渡すと、クラスのサイズを考慮した分割になるようです。
(データは適当です。)
import numpy as np from sklearn import cross_validation from sklearn import svm from sklearn.cross_validation import StratifiedKFold X = np.array([[-3,-2], [-1,0], [-4,2], [3,1], [4,-1], [-1,0], [-2,-5], [3,5], [10,1], [0,1]]) y = np.array([0,0,0,1,1,0,0,1,1,1]) skf = StratifiedKFold(y, 5) for train, test in skf: print "training data indices", train print "test data indices", test clf = svm.SVC(kernel='linear', C=1) clf.fit(X[train], y[train]) predict = clf.predict(X[test]) print "prediction", predict print "ground truth", y[test] print "accuracy", (predict == y[test]).sum() / float(predict.size) print "----"