9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クロス・バリデーション (K-fold)

Last updated at Posted at 2017-04-19

クロス・バリデーション (K-fold)

クロス・バリデーションは手許のデータのうち、いくらかを訓練データ、残りをテストデータにして分類器の精度を見る検証方法。そのうち、k-fold法は、データをk個に分割し、うちk-1個で訓練し、1個でテストする。そのk通りの訓練およびテストを試して、成績の平均値をその分類器のスコアとする。たとえば、5つのデータを3つに分割した次が参考になる。

kf = KFold(5, n_folds=3)
for train, test in kf:
    print(train, test)

これは、

[2 3 4] [0 1] [0 1 4] [2 3] [0 1 2 3] [4]

を返す。この数字は、何番目を訓練データ、テストデ―タとするかの添え字(index)になる。たとえば、

[2 3 4] [0 1]

のときは、

X(train) = np.numpy([9,0,3],[1,2,-1],[-4,8,3])
y(train) = np.numpy([1,0,0])

と同じことになっている(X, yがどのような数だったか見よ)。また、5つのデータが

 01, 23, 4

の3つに分割されているとわかる(テストデータを見ると明白)。上記のコードでは、スコアが

 0.0
 0.5
 0.0

と返ってきたので、成績は平均して16.7%だとわかる。実際、

for train, test in kf:
    X_train, y_train, X_test, y_test = X[train], y[train], X[test], y[test]
    clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
    print(clf.predict(X_test), y_test)

とすると、

[0 0] [1 1]
[1 1] [1 0]
[1] [0]

なので、scoreの正しさを確認できる (ここで、成績はこの2:2:1の加重平均にしなくていいのかという疑問が生じるのだが)。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?