随机森林回归交叉验证:默认scores含义与自定义评分方法问询
随机森林回归器交叉验证相关问题解答
问题1:回归任务默认交叉验证中的scores具体指代什么?
在scikit-learn里,当你给回归模型(比如你用的RandomForestRegressor)做交叉验证时,如果没手动指定评分指标,默认用的是R²系数(决定系数)。
简单解释下:R²衡量的是模型能解释目标变量方差的比例——
- 取值范围是(-∞, 1],越接近1说明模型拟合效果越好;
- 若R²为0,意味着模型预测效果和直接取目标变量平均值差不多;
- 要是出现负数,那模型表现还不如直接用均值当预测结果。
所以你拿到的scores数组里的每个元素,就是对应交叉验证折上模型算出的R²分数。
问题2:如何将均方误差(MSE)等函数设置为评分指标?
当然可以,这里有两种常用方法来指定自定义评分指标:
方式1:直接用scikit-learn内置的评分字符串
scikit-learn为回归任务提供了不少内置的评分字符串,比如针对均方误差,你可以用neg_mean_squared_error(注意是负均方误差)——这是因为scikit-learn的API默认要求“评分越高越好”,但MSE本身是越小越好,所以取负值来适配这个逻辑。
示例代码:
from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import cross_val_score rf = RandomForestRegressor(n_estimators=100, criterion='mse', random_state=1, n_jobs=-1) # 指定负均方误差作为评分指标 scores = cross_val_score(rf, X_trainr, y_train, scoring='neg_mean_squared_error') # 取负数绝对值得到常规MSE mse_scores = -scores
方式2:用make_scorer自定义评分函数
如果想更灵活控制(比如直接用原始MSE,或者自定义其他指标),可以用sklearn.metrics.make_scorer来包装评分函数:
示例代码:
from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import cross_val_score from sklearn.metrics import mean_squared_error, make_scorer rf = RandomForestRegressor(n_estimators=100, criterion='mse', random_state=1, n_jobs=-1) # 包装均方误差函数,设置greater_is_better=False表示指标越小越好 mse_scorer = make_scorer(mean_squared_error, greater_is_better=False) scores = cross_val_score(rf, X_trainr, y_train, scoring=mse_scorer) # 取负得到常规MSE mse_scores = -scores # 也可以直接得到正的MSE(此时cross_val_score会按“越小越好”处理分数) mse_scorer_positive = make_scorer(mean_squared_error, greater_is_better=True) scores_positive = cross_val_score(rf, X_trainr, y_train, scoring=mse_scorer_positive)
这样就能根据需求,把MSE或者其他自定义指标作为交叉验证的评分标准啦。
内容的提问来源于stack exchange,提问作者companyyy
相关产品推荐
相关产品推荐

