随机森林的交叉验证

时间:2018-03-25 03:32:15

标签: machine-learning random-forest cross-validation

我使用以下代码进行随机森林回归和交叉验证。

我有两个问题。

  • 我不明白案件中交叉验证的“分数”是什么意思 回归,而不是分类(我的意思是在默认情况下)。什么 是这个吗?
  • 是否有设置其他功能的功能(例如 mean_squared_error)作为分数?

谢谢。

from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor(n_estimators=100, criterion='mse',random_state=1, n_jobs=-1)    
rf.fit(X_trainr, y_trainr)    
y_train_pred = rf.predict(X_trainr)    
y_test_pred = rf.predict(X_testr)    
y_all_pred = rf.predict(xsetr)    

from sklearn.model_selection import cross_val_score

scores = cross_val_score(rf, xsetr, ysetr, cv=5)    
print("Cross-validation scores:{}".format(scores))

3 个答案:

答案 0 :(得分:1)

  • 它为您提供验证集上模型的准确性
  • 但它执行Kfold交叉验证而不是简单的培训验证拆分
  • Cross-Validation 通常在数据量非常少的情况下应用,而且通常会轮流分割
  • 交叉验证拆分的数量由参数cv给出,在您的情况下为5
  • 它只是意味着将数据拆分5次(每次都有不同的拆分),并且将评估此拆分的模型性能,并且此评估指标是准确度
  • scores变量将是一个浮动的numpy数组,其形状为(5,)
  • 因此,您的scores数组包含5个值,每个值表示模型在特定拆分上的准确性(拆分是测试数据)
  • 评分参数不一定是您可以将其设置为MSE或任何其他定量测量的准确度
  • 您可以更改scoring参数,该参数必须是cross_val_score函数的字符串,但我认为默认情况下是精确度
  • 您可以查看 here 评分参数列表

答案 1 :(得分:1)

根据文档:cross_val_score的结果是每次交叉验证运行的估算器得分数。。默认情况下,根据我的理解,这是每个折叠上分类器的准确性。对于回归,由你决定,它可以是均方误差,也就是损失。如果您有兴趣,可以查看此功能的源代码。

答案 2 :(得分:0)

回归模型的sklearn中使用的默认分数是R^2 coefficient.

  

系数R ^ 2定义为(1-u / v),其中u是残差   平方和((y_true - y_pred)** 2).sum()和v是总和   of square((y_true - y_true.mean())** 2).sum()。最好的   得分为1.0,它可以是负数(因为模型可以是   任意恶化)。一个始终预测预期的常数模型   y的值,忽略输入特征,得到R ^ 2得分   0.0。

您可以通过将scoring parameter传递给cross_val_score来选择不同的简历得分。为了最小化均方误差,它将是neg_mean_squared_error(分数总是最大化):

scores = cross_val_score(rf, xsetr, ysetr, cv=5, scoring = 'neg_mean_squared_error')