我想说决策树中有序和无序因素的不同处理更多的是约定和实现细节,而不是必要性。
但这也是一个重要的优化功能。请参阅此处的文档 rpart
我们已经说过,对于具有米水平,所有2(米- 1 ) 测试了不同的可能拆分..
和
幸运的是,对于任何有序的结果,都有一个计算捷径,允许程序仅使用 米- 1 比较。
如您所见,有序因子的处理可能非常有效。
因此,我的建议 - 作为特征工程的一部分,决定是使用有序因子还是无序因子:
仅当它与输出变量高度相关时才使用有序因子,否则回退到无序因子
Bellow 是一个简单的例子,一个以有序因子为特征的分散输出变量如何使决策树变得非常深且无效。
> df
X Y
1 1 0
2 2 1
3 3 0
4 4 1
> str(df)
'data.frame': 4 obs. of 2 variables:
$ X: Ord.factor w/ 4 levels "1"<"2"<"3"<"4": 1 2 3 4
$ Y: num 0 1 0 1
注意输出变量 是 与有序因子高度不相关。
> fit <- rpart(Y ~ X, method="class", data = df, control=rpart.control(minsplit = 1))
> print(fit)
n= 4
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 4 2 0 (0.50000000 0.50000000)
2) X=1 1 0 0 (1.00000000 0.00000000) *
3) X=2,3,4 3 1 1 (0.33333333 0.66666667)
6) X=3,4 2 1 0 (0.50000000 0.50000000)
12) X=1,2,3 1 0 0 (1.00000000 0.00000000) *
13) X=4 1 0 1 (0.00000000 1.00000000) *
7) X=1,2 1 0 1 (0.00000000 1.00000000) *
这导致了一个深度(且不可扩展)的决策树。

使因子无序导致最优决策树。
> df
X Y
1 1 0
2 2 1
3 3 0
4 4 1
> str(df)
'data.frame': 4 obs. of 2 variables:
$ X: Factor w/ 4 levels "1","2","3","4": 1 2 3 4
$ Y: num 0 1 0 1
>
> fit <- rpart(Y ~ X, method="class", data = df, control=rpart.control(minsplit = 1))
> print(fit)
n= 4
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 4 2 0 (0.50000000 0.50000000)
2) X=1,3 2 0 0 (1.00000000 0.00000000) *
3) X=2,4 2 0 1 (0.00000000 1.00000000) *
