web-dev-qa-db-ja.com

pythonのKFoldは正確に何をしますか?

私はこのチュートリアルを見ています: https://www.dataquest.io/mission/74/getting-started-with-kaggle

予測を行うパート9に行きました。そこには、titanicと呼ばれるデータフレームにいくつかのデータがあり、それを使用して次のように分割されます。

# Generate cross validation folds for the titanic dataset.  It return the row indices corresponding to train and test.
# We set random_state to ensure we get the same splits every time we run this.
kf = KFold(titanic.shape[0], n_folds=3, random_state=1)

正確に何をしているのか、kfがどのようなオブジェクトなのかはわかりません。ドキュメントを読んでみましたが、あまり役に立ちませんでした。また、3つのフォールド(n_folds = 3)がありますが、この行で後でトレインとテストのみにアクセスするのはなぜですか(そして、それらがトレインとテストと呼ばれていることをどのようにして知ることができますか?)

for train, test in kf:
12
user

KFoldは、トレーニングとテストのインデックスを提供して、データをトレーニングセットとテストセットに分割します。それはデータセットをk連続フォールドに分割します(デフォルトではシャッフルなし)。各フォールドは検証セットに一度使用され、残りのk - 1フォールドはトレーニングセット( source )を形成します。

たとえば、1から10までのデータインデックスがあるとします。n_fold=kを使用すると、最初の反復で、テストインデックスとしてi番目の(i<=k)フォールドが得られ、残りの(k-1)フォールド(そのiなし)が得られます。 'th fold)を列車のインデックスとしてまとめます。

import numpy as np
from sklearn.cross_validation import KFold

x = [1,2,3,4,5,6,7,8,9,10,11,12]
kf = KFold(12, n_folds=3)

for train_index, test_index in kf:
    print (train_index, test_index)

出力

折り方1:[4 5 6 7 8 9 10 11] [0 1 2 3]

折り2:[0 1 2 3 8 9 10 11] [4 5 6 7]

折り3:[0 1 2 3 4 5 6 7] [8 9 10 11]

sklearn 0.20のインポート更新:

KFoldオブジェクトは、バージョン0.20でsklearn.model_selectionモジュールに移動されました。 KFoldをsklearn 0.20+にインポートするには、from sklearn.model_selection import KFoldを使用します。 KFoldの現在のドキュメント ソース

18
qmaruf

これまでに学んだKFに関する理論的な情報を共有します。

KFOLDはモデル検証手法であり、事前トレーニング済みモデルを使用しません。むしろhyper-parameterを使用して、k-1データセットで新しいモデルをトレーニングし、k番目のセットで同じモデルをテストします。

K個の異なるモデルが検証に使用されています。

K番目のテストデータセットに基づく、K個の異なるスコア(精度パーセンテージ)を返します。そして、モデルを分析するために一般的に平均を取ります。

分析したいすべての異なるモデルでこのプロセスを繰り返します。簡単なアルゴリズム:

  1. データをトレーニング部分とテスト部分に分割します。
  2. トレーニングされたさまざまなモデルは、このトレーニングデータでSVM、RF、LRと言います。
   2.a Take whole data set and divide in to K-Folds.
   2.b Create a new model with the hyper parameter received after training on step 1.
   2.c Fit the newly created model on K-1 data set.
   2.d Test on Kth data set
   2.e Take average score.
  1. 異なる平均スコアを分析し、SVM、RFおよびLRから最適なモデルを選択します。

これを行う単純な理由は、一般的にデータに欠陥があり、データセット全体を次のように分割した場合です。

  1. トレーニング
  2. 検証
  3. テスト中

比較的小さなデータのチャンクを除外する場合があり、モデルに適合しない場合があります。また、トレーニングのために一部のデータがそのまま残っており、そのようなデータに対する動作を分析していない可能性もあります。

KFは両方の問題を克服しました。

1
vipin bansal