matlab'fitctree'的CART算法考虑了属性顺序为什么?

问题描述:

这里是一个例子,提到matlab的fitctree考虑了特征顺序!为什么?matlab'fitctree'的CART算法考虑了属性顺序为什么?

load ionosphere % Contains X and Y variables 
Mdl = fitctree(X,Y) 
view(Mdl,'mode','graph'); 
X1=fliplr(X); 
Mdl1 = fitctree(X1,Y) 
view(Mdl1,'mode','graph'); 

不一样的模型,因此尽管处理相同的功能,分类精度不一样吗?

+1

这不是重新排序,而改变的标签。 X代表特征矩阵,Y代表类标签的组合向量。 下面是一个简单的例子:假设我们有2种人显眼和贪婪的人第一个会很高兴,如果他得到5个苹果和3个香蕉或2个苹果和2个香蕉,另一个不会,如果他得到10个苹果和9个香蕉或8个苹果和8个香蕉,因为他贪婪。在这种情况下:训练矩阵X将是'[5 3; 2 2; 10 9; 8 8],Y会[开心快乐生气]'。通常,如果我们对我们的特征进行排序即[5 2 10 8]'和[3 2 9 8],我们得到相同的模型 – LMarwa

+0

当我运行你的代码时,我得到了相当类似的树,只有很小的差异。我假设唯一的区别是因为要划分A类= [2 1 2 1]和B类= [5 6 5 6],你可以在(2-5)之间划分任何地方,并且分类是完美的。数值求解器落在中间的某处,并正确分类,从而停止。 –

+0

即使它正确分类,通常它应该呈现与该特征的顺序无关的相同模型。如果[2 1 2 1; 5 6 5 6]是Y = [A B]的训练矩阵,因此如果我们使用[1 1 2 2; 6 6 5 5]为相同的Y,对吗? – LMarwa

在您的示例中,X包含34个预测变量。预测变量不包含名称,而fitctree只是通过列号x1, x2, ..., x34来引用它们。如果您翻转表格,则列号会更改,因此会更改其名称。所以x1 -> x34x2 -> x33等。

对于大多数节点,这并不重要,因为CART总是通过使两个子节点之间的杂质增益最大化的预测器来划分节点。但有时会有多个预测结果导致相同的杂质增益。然后它只选择列号最低的一个。而且,由于通过对预测变量进行重新排序来更改列号,您最终会在该节点处显示不同的预测变量。

E.g.让我们来看看在标记分裂:

原始订单(mdl): noflip 翻转顺序(mdl1): flip

到目前为止总是相同的预测和值已被选定。名称因订单而改变,例如旧数据中的x5 = x30在新模型中。但和x6实际上是不同的预测指标。 x6按原始顺序为x29

的预测之间的散点图显示了这是如何发生:

complot

其中蓝色和青色的线条标示由mdlmdl1分别在该节点进行分割。正如我们所看到的,两个拆分都会生成每个标签具有相同数量元素的子节点!因此,CART可以选择两个预测变量中的任何一个,它会导致相同的杂质增益。

在这种情况下,它似乎只是选择一个较低的列号。在非翻转表被选择,而不是x29,因为3 < 29。但是如果你翻转桌子,变成x32x29变成x6。由于6 < 32您现在结束了x6,原来的x29

最终这并不重要 - 翻转表的决策树不会更好或更糟。它只发生在树开始过度拟合的较低节点上。所以你真的不必关心它。

附录:

代码散点图代:

load ionosphere % Contains X and Y variables 
Mdl = fitctree(X,Y); 
view(Mdl,'mode','graph'); 
X1=fliplr(X); 
Mdl1 = fitctree(X1,Y); 
view(Mdl1,'mode','graph'); 

idx = (X(:,5)>=0.23154 & X(:,27)>=0.999945 & X(:,1)>=0.5); 
remainder = X(idx,:); 
labels = cell2mat(Y(idx,:)); 

gscatter(remainder(:,3), remainder(:,(35-6)), labels,'rgb','osd'); 

limits = [-1.5 1.5]; 
xlim(limits) 
ylim(limits) 
xlabel('predictor 3') 
ylabel('predictor 29') 
hold on 
plot([0.73 0.73], limits, '-b') 
plot(limits, [0.693 0.693], '-c') 
legend({'b' 'g'}) 
+0

非常感谢您的解释。但即使“重复预测结果会导致相同的杂质增益”,即使我们重新排列树,为什么决策树没有考虑建立树的相同预测因子? – LMarwa

+0

@LMarwa我扩展了解释。现在清楚了吗? –