为什么数据集中指定的特征的列出顺序对随机森林分类器很重要

数据挖掘 随机森林 scikit-学习
2021-09-29 12:29:36
>>> from sklearn.ensemble import RandomForestClassifier

>>> clf = RandomForestClassifier(n_estimators=10, random_state=1)
>>> Y=[0,1]

>>> X = [[3,2,1,0], [7,6,5,4]]
>>> clf = clf.fit(X, Y)
>>> print clf.feature_importances_
[ 0.2  0.1  0.1  0. ]

>>> X = [[0, 1, 2,3], [4,5,6,7]]
>>> clf = clf.fit(X, Y)
>>> print clf.feature_importances_
[ 0.2  0.1  0.1  0. ]

>>> X = [[3,2,1,0], [7,6,5,4]]
>>> clf = clf.fit(X, Y)
>>> print clf.feature_importances_
[ 0.2  0.1  0.1  0. ]

>>> X = [[3,1,2,0], [7,5,6,4]]
>>> clf = clf.fit(X, Y)
>>> print clf.feature_importances_
[ 0.2  0.1  0.1  0. ]

假设特征有名称。当我打乱/更改训练数据集中指定的特征的列出顺序时,每个特征的重要性都会发生变化。
这意味着生成的随机森林分类器也会发生变化。请注意,我通过修复随机种子排除了随机性的影响。

既然随机种子是固定的,为什么数据集中指定的特征的列出顺序对随机森林分类器很重要?谢谢。

1个回答

由于您固定了种子,因此使用默认选项,bootstrap=True每棵树都建立在数据的固定子样本上。使用默认选项,max_features='auto'每棵树使用 2 个特征。由于您固定了种子,所以它总是相同的,让我们说第一棵树的“第一和第四”特征。而且它们在你的每一次洗牌中都是不同的。所以,树不一样。这同样适用于每棵树。

顺便说一句,总共有 4 个特征,只有 6 (4*3/2=6) 种不同的树是可能的。当 n_estimators=10 时,其中一些树必然会重复。在每次洗牌中,这些都是不同的树。