使用单独的预定义验证集和 sklearn GridSearchCV
Posted
技术标签:
【中文标题】使用单独的预定义验证集和 sklearn GridSearchCV【英文标题】:Using separate predefined Validation Set with sklearn GridSearchCV 【发布时间】:2018-11-24 07:42:39 【问题描述】:我正在 RandomForestClassifier 上运行 Sklearn 库中的 GridSearchCV(网格搜索交叉验证)。 我想使用我已经获得并先前保存在磁盘上的单独 numpy 数组上的训练/验证/测试拆分(即,为了某些测试的兼容性,我将不得不与同一拆分上的其他算法做)。
我找不到将我的单独验证集与 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)
有没有更好的方法来做到这一点?
【问题讨论】:
【参考方案1】:您可以传递带有一对 train/val 索引的可迭代对象。
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)
【讨论】:
是的,但这并不能避免创建合并版本(这就是我想要做的:))以上是关于使用单独的预定义验证集和 sklearn GridSearchCV的主要内容,如果未能解决你的问题,请参考以下文章