6

いくつかのカーネル パラメーターを選択するために、scikit-learn が提供する KFold 関数を使用して 10 倍の CV を実行しています。私はこの(grid_search)手順を実装しています:

1-pick up a selection of parameters
2-generate a svm
3-generate a KFold
4-get the data that correspons to training/cv_test
5-train the model (clf.fit)
6-classify with the cv_testdata
7-calculate the cv-error 
8-repeat 1-7
9-When ready pick the parameters that provide the lowest average(cv-error)

KFold 生成でシャッフルを使用しない場合、同じ実行を繰り返すと、平均 (cv_errors) でほとんど同じ結果が得られ、「最良の結果」が再現可能です。シャッフルを使用すると、同じ実行を数回繰り返し、「最良の値」が再現できない場合、平均 (cv エラー) に異なる値が得られます。KFold パスごとに異なる cv_errors を取得する必要があることは理解できますが、最終的な平均は同じである必要があります。シャッフル付きの KFold は実際にどのように機能しますか? KFold が呼び出されるたびに、インデックスがシャッフルされ、トレーニング/テスト データが生成されます。「トレーニング/テスト」のためにさまざまなフォールドをどのように選択しますか? トレーニング/テスト用にさまざまなフォールドをランダムに選択する方法はありますか? 「シャッフル」で有利な状況とそうでない状況は??

4

1 に答える 1

10

shuffle が True の場合、データ全体が最初にシャッフルされ、次に K-Folds に分割されます。繰り返し可能な動作のために、random_state を整数シード (random_state=0) などに設定できます。パラメータがシャッフルに依存している場合、これはパラメータの選択が非常に不安定であることを意味します。おそらく、トレーニング データがほとんどないか、小さな折り畳み (2 つまたは 3 つなど) を使用している可能性があります。

「シャッフル」は主に、データがクラスごとにソートされている場合に役立ちます。これは、各フォールドに 1 つのクラスのサンプルのみが含まれる可能性があるためです (特に、確率的勾配のまともな分類子の場合、ソートされたクラスは危険です)。他の分類子の場合、違いはありません。シャッフルが非常に不安定な場合、パラメーターの選択は有益ではない可能性があります (ゴミとも呼ばれます)。

于 2012-09-02T20:18:36.137 に答える