ネストされたクロス検証の実装に苦労しています。
私はこの質問を読みましたが、何か違うことをしようとしています: sklearn で StratifiedShuffleSplit を使用したネストされたクロス検証
私のデータ: 26 の科目 (クラスごとに 13) x 6670 の機能があります。特徴削減アルゴリズム (Boruta について聞いたことがあるかもしれません) を使用して、データの次元を削減しました。ここから問題が始まります。LOSO を外部パーティショニング スキーマとして定義しました。したがって、26 の cv フォールドのそれぞれについて、特徴削減のために 24 の被験者を使用しました。これにより、各 cv フォールドで異なる数の機能が発生します。ここで、cv フォールドごとに、ハイパーパラメーターの最適化 (rbf カーネルを使用した SVM) に同じ 24 のサブジェクトを使用したいと考えています。
これは私がしたことです:
cv = list(LeaveOneout(len(y))) # in y I stored the labels
inner_train = [None] * len(y)
inner_test = [None] * len(y)
ii = 0
while ii < len(y):
cv = list(LeaveOneOut(len(y)))
a = cv[ii][0]
a = a[:-1]
inner_train[ii] = a
b = cv[ii][0]
b = np.array(b[((len(cv[0][0]))-1)])
inner_test[ii]=b
ii = ii + 1
custom_cv = zip(inner_train,inner_test) # inner cv
pipe_logistic = Pipeline([('scl', StandardScaler()),('clf', SVC(kernel="rbf"))])
parameters = [{'clf__C': np.logspace(-2, 10, 13), 'clf__gamma':np.logspace(-9, 3, 13)}]
scores = [None] * (len(y))
ii = 0
while ii < len(scores):
a = data[ii][0] # data for train
b = data[ii][1] # data for test
c = np.concatenate((a,b)) # shape: number of subjects * number of features
d = cv[ii][0] # labels for train
e = cv[ii][1] # label for test
f = np.concatenate((d,e))
grid_search = GridSearchCV(estimator=pipe_logistic, param_grid=parameters, verbose=1, scoring='accuracy', cv= zip(([custom_cv[ii][0]]), ([custom_cv[ii][1]])))
scores[ii] = cross_validation.cross_val_score(grid_search, c, y[f], scoring='accuracy', cv = zip(([cv[ii][0]]), ([cv[ii][1]])))
ii = ii + 1
ただし、次のエラー メッセージが表示されました:インデックス 25 はサイズ 25 の範囲外です
どんな助けでも本当に感謝します