如何绘制随机森林模型的学习曲线?

时间:2016-03-24 19:16:00

标签: machine-learning random-forest

继Andrew Ng的机器学习课程之后,我想尝试他绘制学习曲线的方法(成本与样本数量),以评估是否需要额外的数据样本。但是,对于随机森林,我对如何绘制学习曲线感到困惑。随机森林似乎没有基本的成本函数,例如,线性回归,所以我不确定在y轴上究竟使用什么。

2 个答案:

答案 0 :(得分:1)

您可能会在这里混淆几个类别。

首先,在机器学习中,learning curve被定义为

  

将性能与经验相关联的图表......性能是学习系统的错误率或准确性,而经验可能是用于学习的训练样本的数量或用于优化系统模型参数的迭代次数。 / p>

随机森林和线性模型均可用于回归或分类。

  • 对于回归,成本通常是预测和信号之差的l2范数(although sometimes the l1 norm)的函数。

  • 对于分类,成本通常是不匹配或记录丢失。

关键在于它不是底层机制是线性模型还是森林的问题。您应该确定它是什么类型的问题,以及成本函数是什么。在确定之后,绘制学习曲线只是信号和预测的函数。

答案 1 :(得分:0)

您可以使用此功能绘制任何常规估计量(包括随机森林)的学习曲线。不要忘记纠正缩进。

def learning_curves(estimator, data, features, target, train_sizes, cv):
train_sizes, train_scores, validation_scores = learning_curve(
estimator, data[features], data[target], train_sizes = train_sizes,
cv = cv, scoring = 'neg_mean_squared_error')
train_scores_mean = -train_scores.mean(axis = 1)
validation_scores_mean = -validation_scores.mean(axis = 1)

plt.plot(train_sizes, train_scores_mean, label = 'Training error')
plt.plot(train_sizes, validation_scores_mean, label = 'Validation error')
plt.ylabel('MSE', fontsize = 14)
plt.xlabel('Training set size', fontsize = 14)
title = 'Learning curves for a ' + str(estimator).split('(')[0] + ' model'
plt.title(title, fontsize = 18, y = 1.03)
plt.legend()
plt.ylim(0,40)

使用此功能绘制学习曲线:

from sklearn.ensemble import RandomForestRegressor
plt.figure(figsize = (16,5))
model = RandomForestRegressor()
plt.subplot(1,2,i)
learning_curves(model, data, features, target, train_sizes, 5)