我在RandomForestClassifier上从Sklearn库运行GridSearchCV(网格搜索交叉验证)。 我想使用我已经获得并先前在单独的numpy阵列上保存在磁盘上的训练/验证/测试拆分(即,为了兼容某些测试,我将在同一拆分中与其他算法进行兼容)。 / p>
我找不到使用GridSearchCV单独验证集的方法。我找到的唯一解决方法是在一个新的numpy数组上使用PredefinedSplit,我将连接保存文件中的原始列和验证数组连接起来。
ts_train = extractPlainTable(np.load('TimeSeries/train_x%d_30.npy' % i),s)
ts_val = extractPlainTable(np.load('TimeSeries/validation_x%d_20.npy' % i),s)
ts_test = extractPlainTable(np.load('TimeSeries/test_x%d_30.npy' % i),s)
labels_train = np.load('ground_truth/train_y%d_30.npy' % i)
labels_val = np.load('ground_truth/validation_y%d_20.npy' % i)
labels_test = np.load('ground_truth/test_y%d_30.npy' % i)
clf = RandomForestClassifier()
merged_ts = np.concatenate((ts_train,ts_val),axis=0)
merged_labels = np.concatenate((labels_train,labels_val),axis=0)
mytestfold = []
for i in range(len(ts_train)):
mytestfold.append(-1)
for i in range(len(ts_val)):
mytestfold.append(0)
ps = PredefinedSplit(test_fold=mytestfold)
grid_search = GridSearchCV(estimator=clf, param_grid=param_grid,cv=ps)
grid_search.fit(merged_ts, merged_labels)
有更好的方法吗?
答案 0 :(得分:0)
您可以使用一对train / val索引传递一个iterable。
split = [(range(len(ts_train)), range(len(ts_train), len(ts_train) + len(ts_val)))]
grid_search = GridSearchCV(estimator=clf, param_grid=param_grid, cv=split)
grid_search.fit(merged_ts, merged_labels)