随机森林的多分类——如何衡量结果的“稳定性”

时间:2021-01-30 14:11:44

标签: python random scikit-learn random-forest

我正在使用随机森林(来自 sklearn)来解决多分类问题,其中有序的类(比如 0,...,n,在我的特定情况下 n=4)大致均匀分布。我有很多观察结果(大约 5000 个),我将它们分别以 70%/30% 的比例分配在训练/测试中 - 课程在训练和测试中也分布均匀。我设置了 random_state=None,所以每次我重新运行模型的拟合(在同一个训练集上)然后预测时,我在我的测试集上得到的结果略有不同。

我的问题是如何通过比较不同的预测来衡量随机森林是否运行良好...

例如,如果我首先只获得 0,然后只获得 n(其中,0 和 n 是最不同的类别)作为预测,我会说 RF 根本不起作用。相反,如果只有少数预测从一类变为接近类(例如,先是 0,然后是 1),我会说 RF 运行良好。

是否有特定的命令可以自动检查?

2 个答案:

答案 0 :(得分:0)

我认为对于这种类型的调查,我们并不关心分类器是否做出了正确的预测,但我们想知道它是否做出了稳定==一致的预测。

假设 repeated_prediction 具有形状:[repetitions,samples] 并包含对每个样本 1...n 多次重复的预测

关于:

np.mean(np.std(repeated_predictions,axis=0))

也有分析随机森林一致性的论文,例如Consistency of Random Forests and Other Averaging Classifiers 但它似乎是一个虽然阅读。

答案 1 :(得分:0)

一种解决方案是使用交叉验证。有了这个,您将获得模型总体准确性的可靠度量。

然后您将训练和测试 n 个不同的模型(检查这个 link,它解释得很好)。您可以计算每个模型的准确度,然后获得这些度量的平均值。示例是(有 5 个拆分):

scores = cross_val_score(clf, X, y, cv=5)

然后绘制所有这些精度的均值和标准差:

print("%0.2f accuracy with a standard deviation of %0.2f" % (scores.mean(), scores.std()))
相关问题