如何在使用交叉验证时使用测试数据集进行预测?

How to predict with the test dataset while using cross validation?

我想对预测模型使用交叉验证。我想保留 20% 的数据作为测试集,并使用其余数据通过交叉验证来拟合我的模型。

希望如下:

作为机器学习模型,我想使用随机森林和LightGBM。

from sklearn.ensemble import RandomForestRegressor 
random_forest = RandomForestRegressor (n_estimators=1400, max_depth=80, max_features='sqrt',
                                   min_samples_leaf=1, min_samples_split=5, 
                                   random_state=1, verbose=1, n_jobs=-1)

from sklearn.model_selection import cross_val_score
scores = cross_val_score(random_forest, X_train, y_train, cv=5, scoring = 'r2')

它给出了结果,但我想预测 X_test 数据的 y 值。你能帮我吗?之后,我也会为LightGBM创建一个模型。

  from sklearn.ensemble import RandomForestRegressor
  random_forest = RandomForestRegressor(n_estimators=1400, max_depth=80, max_features='sqrt',
                               min_samples_leaf=1, min_samples_split=5, 
                               random_state=1, verbose=1, n_jobs=-1)

   model = random_forest.fit(x_train, y_train)
   prediction = model.predict(x_test) 

所以预测是列表,那么你可以使用这个预测来检查准确性

一般来说,交叉验证 (CV) 用于以下两个原因之一:

  • 模型调整(即超参数搜索),以搜索最大化模型性能的超参数;在 scikit-learn 中,这通常是使用 GridSearchCV 模块
  • 完成的
  • 单个模型的性能评估,您对选择模型的超参数不感兴趣;这通常通过 cross_val_score
  • 实现

根据您的设置,很明显您属于上述第二种情况:无论出于何种原因,您似乎已经得出结论,要使用的超参数是您在模型定义中显示的超参数,并且,在继续安装它之前,您需要了解它的性能如何。您已选择使用 cross_val_score 执行此操作,并且您显示的代码到目前为止确实没问题。

但您还没有完成:cross_val_score 只做了那个,即它 return 是一个分数,它 不是 return 一个合适的模型。因此,为了真正适合您的模型并获得对测试集的预测(当然假设您对 cross_val_score 编辑的 return 的实际分数感到满意),您需要继续这样做:

random_forest.fit(X_train, y_train)
pred = random_forest.predict(X_test) 

LightGBM 的过程也应该类似。