理解使用随机森林进行 5 倍训练的准确度图

数据挖掘 随机森林 交叉验证 多标签分类 准确性 matplotlib
2022-03-09 14:51:28

我正在使用sklearn.model_selection.learning_curve5 倍的数据训练。代码如下所示。

train_sizes = [1, 100, 500, 1000, 2000, 3000, 3879]
train_sizes,train_scores, validation_scores = learning_curve(estimator = ensemble.RandomForestClassifier(),
                                                          X = X_res,
                                                          y = y_res, 
                                                          train_sizes = train_sizes, 
                                                          cv = 5,
                                                          scoring = 'accuracy')
train_scores_mean = train_scores.mean(axis = 1)
validation_scores_mean = validation_scores.mean(axis =1)
plt.style.use('seaborn')
plt.plot(train_sizes, train_scores_mean, label = 'Training acc')
plt.plot(train_sizes, validation_scores_mean, label = 'Validation acc')
plt.ylabel('Accuracy', fontsize = 14)
plt.xlabel('Training set size', fontsize = 14)
plt.title('Learning curves for a linear RF model', fontsize = 18, y = 1.03)
plt.legend()

另外,我正在使用随机森林分类器模型来解决多类分类问题。当我绘制精度图时,它如下所示。 学习曲线图

所有训练规模的平均训练准确率怎么可能是 100%?

任何帮助表示赞赏。

1个回答

使用RandomForestClassifier类的所有默认值会导致过度拟合。scikit-learn文档中所述,

控制树大小的参数的默认值(例如max_depth,min_samples_leaf等)导致完全生长和未修剪的树在某些数据集上可能非常大。为了减少内存消耗,应该通过设置这些参数值来控制树的复杂性和大小。

完全成熟的树在训练数据上的得分很高,但正如您所猜想的那样,这不是随机森林应该被使用的方式。尝试设置分类器的各种参数(max_depth例如开始),你会得到更一致的结果。