1

我想对预测模型使用交叉验证。我想保留 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 创建一个模型。

4

2 回答 2

3

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

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

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

但是您还没有完成:cross_val_score仅此而已,即它返回一个分数,它不返回一个拟合模型。因此,为了实际拟合您的模型并获得对测试集的预测(当然假设您对返回的实际分数感到满意cross_val_score),您需要继续这样做:

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

LightGBM 的过程也应该类似。

于 2020-07-17T15:47:09.020 回答
1
  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) 

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

于 2020-07-17T13:36:50.403 回答