Python: sklearn kFold return 关键字参数的多个值 'shuffle'

Python: sklearn kFold return multiple values for keyword argument 'shuffle'

我正在尝试使用 sklearn

与经典 kfold 进行交叉验证
def train_and_evaluate(clf, X_train, y_train):
    clf.fit(X_train, y_train)
    # create a k-fold cross validation iterator of k=5 folds
    cv = KFold(int(X_train.shape[0]), 4, shuffle = True)  ## Classic KFold
    scores = cross_val_score(clf, X_train, y_train, cv=cv)
    return (clf, scores) 

X_train, X_test, y_train, y_test =  train_test_split(X, Y, test_size=0.20, random_state=42)
scaler  = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test  = scaler.transform(X_test)

但我收到以下错误:

clf1, scores1 = train_and_evaluate(linear_model.SGDRegressor(), X_train, y_train)

TypeError: __init__() got multiple values for keyword argument 'shuffle'

KFold 的函数签名如下所示

sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)

因此,当您传递这两个位置参数时 (int(X_train.shape[0]), 4),您为参数 shuffle 传递了 4。然后,您还通过名称传递 shuffle,这就是您获得多个参数错误的方式。

我不太清楚你为什么要传递这两个位置参数,但我认为如果你想要 4 折拆分,你只需要传递 4

import numpy as np

x=np.arange(100)

from  sklearn.model_selection import KFold

kf=KFold(5,shuffle=True,random_state=None)

x=kf.split(X)

for i,j in x:

    print(i,j)