【发布时间】:2016-07-12 12:32:18
【问题描述】:
在 Andrew Ng 的机器学习课程之后,我想尝试他绘制学习曲线(成本与样本数量)的方法,以评估对额外数据样本的需求。但是,对于随机森林,我对如何绘制学习曲线感到困惑。随机森林似乎没有基本的成本函数,例如线性回归,所以我不确定在 y 轴上究竟使用什么。
【问题讨论】:
标签: machine-learning random-forest
在 Andrew Ng 的机器学习课程之后,我想尝试他绘制学习曲线(成本与样本数量)的方法,以评估对额外数据样本的需求。但是,对于随机森林,我对如何绘制学习曲线感到困惑。随机森林似乎没有基本的成本函数,例如线性回归,所以我不确定在 y 轴上究竟使用什么。
【问题讨论】:
标签: machine-learning random-forest
您可能在这里混淆了几个类别。
首先,在机器学习中,learning curve 定义为
将性能与经验相关联的图...。性能是学习系统的错误率或准确度,而经验可能是用于学习的训练示例的数量或用于优化系统模型参数的迭代次数。
随机森林和线性模型都可以用于回归或分类。
对于回归,成本通常是预测和信号之间差异的 l2 范数 (although sometimes the l1 norm) 的函数。
对于分类,代价通常是不匹配或对数丢失。
关键是,这不是底层机制是线性模型还是森林的问题。您应该确定它是什么类型的问题,以及成本函数是什么。在决定之后,绘制学习曲线只是信号和预测的函数。
【讨论】:
您可以使用此功能绘制任何一般估计器(包括随机森林)的学习曲线。不要忘记更正缩进。
import matplotlib.pyplot as plt
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)
【讨论】: