我正在使用以下版本的SKLearn(0.20.2):
from sklearn.model_selection import StratifiedKFold
grid = GridSearchCV(
pipeline, # pipeline from above
params, # parameters to tune via cross validation
refit=True, # fit using all available data at the end, on the best found param combination
scoring='accuracy', # what score are we optimizing?
cv=StratifiedKFold(label_train, n_splits=5), # what type of cross validation to use
)
但是我不明白为什么会出现此错误:
TypeError Traceback (most recent call last)
<ipython-input-26-03a56044cb82> in <module>()
10 refit=True, # fit using all available data at the end, on the best found param combination
11 scoring='accuracy', # what score are we optimizing?
---> 12 cv=StratifiedKFold(label_train, n_splits=5), # what type of cross validation to use
13 )
TypeError: __init__() got multiple values for argument 'n_splits'
我已经尝试过n_fold
,但出现了相同的错误结果。并且也厌倦了更新我的scikit版本和我的conda。有解决这个问题的主意吗?非常感谢!
答案 0 :(得分:2)
StratifiedKFold初始化时仅接受3个参数,都不是训练数据:
StratifiedKFold(n_splits=’warn’, shuffle=False, random_state=None)
因此,当您致电StratifiedKFold(label_train, n_splits=5)
时,它认为您两次通过了n_splits
。
相反,创建对象,然后使用sklearn docs页面上的示例中所述的方法使用对象拆分数据:
get_n_splits([X,y,groups])返回分割数 交叉验证程序中的迭代split(X,y [,groups])生成 索引,将数据分为训练和测试集。
答案 1 :(得分:0)
StratifiedKFold接受三个参数,但是您要传递两个参数。在sklearn documentation
中查看更多创建StratifiedKFold对象,并将其传递给GridSearchCV,如下所示。
const boost::shared_ptr<Blob<float> > feature_blob = classifier.net_->blob_by_name("ip1");
int count = feature_blob->channels() * feature_blob->height() * feature_blob->width();
float* feature_array = new float[count];
const float* feature_blob_data = feature_blob->cpu_data();
memcpy(feature_array, feature_blob_data, count * sizeof(float));