web-dev-qa-db-ja.com

テンソルフローでk倍交差検証を実行するにはどうすればよいですか?

tensorflowのIRISの例 をフォローしています。

私の場合は、すべてのデータが分離されていない単一のCSVファイルにあり、そのデータにk倍交差検証を適用したい場合です。

私が持っています

data_set = tf.contrib.learn.datasets.base.load_csv(filename="mydata.csv",
                                                   target_dtype=np.int)

IRISの例と同じように、多層ニューラルネットワークを使用してこのデータセットでk分割交差検証を実行するにはどうすればよいですか?

18
mommomonthewind

私はこの質問が古いことを知っていますが、誰かが似たようなことをしようとしている場合、 ahmedhosny's answer

新しいtensorflowデータセットAPIには、pythonジェネレーターを使用してデータセットオブジェクトを作成する機能があるため、scikit-learnのKFoldとともに、KFold.split()ジェネレーターからデータセットを作成できます。

import numpy as np

from sklearn.model_selection import LeaveOneOut,KFold

import tensorflow as tf
import tensorflow.contrib.eager as tfe
tf.enable_eager_execution()

from sklearn.datasets import load_iris
data = load_iris()
X=data['data']
y=data['target']

def make_dataset(X_data,y_data,n_splits):

    def gen():
        for train_index, test_index in KFold(n_splits).split(X_data):
            X_train, X_test = X_data[train_index], X_data[test_index]
            y_train, y_test = y_data[train_index], y_data[test_index]
            yield X_train,y_train,X_test,y_test

    return tf.data.Dataset.from_generator(gen, (tf.float64,tf.float64,tf.float64,tf.float64))

dataset=make_dataset(X,y,10)

その後、グラフベースのテンソルフローで、または積極的な実行を使用して、データセットを反復処理できます。積極的な実行の使用:

for X_train,y_train,X_test,y_test in tfe.Iterator(dataset):
    ....
20
Dan Reia

NNは通常、CVが使用されていない非常に高価な大規模なデータセットで使用されます。 IRIS(各種につき50サンプル)の場合、おそらく必要です。 scikit-learn with different random seeds を使用してトレーニングとテストを分割しないのはなぜですか?

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

kfold in kの場合:

  1. 別の値を「random_state」に渡すことでデータを分割する
  2. _trainを使用してネットを学ぶ
  3. _testを使用したテスト

ランダムシードが気に入らず、より構造化されたk分割が必要な場合は、これを here から取得できます。

from sklearn.model_selection import KFold, cross_val_score
X = ["a", "a", "b", "c", "c", "c"]
k_fold = KFold(n_splits=3)
for train_indices, test_indices in k_fold.split(X):
    print('Train: %s | test: %s' % (train_indices, test_indices))
Train: [2 3 4 5] | test: [0 1]
Train: [0 1 4 5] | test: [2 3]
Train: [0 1 2 3] | test: [4 5]
10
ahmedhosny