我想使用交叉验证来构建预测模型。我希望将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_scorescores = cross_val_score(random_forest, X_train, y_train, cv=5, scoring = 'r2')
这会给出结果,但我希望能预测X_test数据的y值。您能帮助我实现吗?之后,我还将为LightGBM创建一个模型。
回答:
一般来说,交叉验证(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,程序也应该类似。