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

How do you plot learning curves for Random Forest models?

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

您可能混淆了这里的几个类别。

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

Plots relating performance to experience.... Performance is the error rate or accuracy of the learning system, while experience may be the number of training examples used for learning or the number of iterations used in optimizing the system model parameters.

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

  • 对于回归,成本通常是预测和信号之间差异的 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)