Optimization 使用scikit进行嵌套的遗漏一个主题(LOSO)交叉验证

Optimization 使用scikit进行嵌套的遗漏一个主题(LOSO)交叉验证,optimization,scikit-learn,cross-validation,hyperparameters,Optimization,Scikit Learn,Cross Validation,Hyperparameters,我正在努力实现嵌套交叉验证 我读了这个问题,但我想做些不同的事情: 我的数据:我有26门学科(每门课13门)x 6670个特征。我使用了一种特征简化算法(你可能听说过Boruta)来降低数据的维数。问题从现在开始:我将LOSO定义为外部分区模式。因此,对于26个cv折叠中的每一个,我使用了24个主题进行特征缩减。这导致每个cv折叠中的特征数量不同。现在,对于每个cv折叠,我想使用相同的24个主题进行超参数优化(带rbf核的SVM) 这就是我所做的: cv = list(LeaveOneout(l

我正在努力实现嵌套交叉验证

我读了这个问题,但我想做些不同的事情:

我的数据:我有26门学科(每门课13门)x 6670个特征。我使用了一种特征简化算法(你可能听说过Boruta)来降低数据的维数。问题从现在开始:我将LOSO定义为外部分区模式。因此,对于26个cv折叠中的每一个,我使用了24个主题进行特征缩减。这导致每个cv折叠中的特征数量不同。现在,对于每个cv折叠,我想使用相同的24个主题进行超参数优化(带rbf核的SVM)

这就是我所做的:

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
cv=list(LeaveOneout(len(y))#在y中我存储了标签
内部列车=[无]*长度(y)
内部_测试=[None]*len(y)
ii=0
而ii
但是,我收到了以下错误消息:索引25超出大小25的界限

任何帮助都将不胜感激