我正在尝试实现一种算法来从数据集中构建决策树。我编写了一个函数来计算子集和特定分区之间的信息增益,然后我尝试所有可能的分区并希望选择“最佳”分区,因为它具有最低的熵。这个过程必须是递归的,因此,在第一次迭代之后,它需要适用于您在上一步中获得的分区的每个子集。
这些是数据:
X = {{1, 0, 1, 1}, {1, 1, 1, 1}, {0, 1, 1, 1}, {1, 1, 1, 0}, {1, 1, 0, 0}}
Xfin[0]=X
这是函数:对于分区的每个子集,它会尝试所有可能的分区并计算IG
. 然后它选择分区IGMAX
:
Partizioneottimale[X_, n_] :=
For[l = 1, l <= Length[Flatten[X[n], n - 1]], l++,
For[v = 1, v <= m, v++,
If[IG[X[n][[l]], Partizione[X[n][[l]], v]] == IGMAX[X[n][[l]]],
X[n + 1][[l]] := Partizione[X[n][[l]], v]]]]
然后我称之为:
Partizioneottimale[Xfin, 0]
它适用于第一个:
Xfin[1]
{{{1, 0, 1, 1}, {1, 1, 1, 1}, {0, 1, 1, 1}, {1, 1, 1, 0}}, {{1, 0, 0, 0}}}
那是熵最低的分区。
但它不适用于下一个:
Partizioneottimale[Xfin, 1]
Set delayed::steps : Xfin[1+1] in the part assignment is not a symbol
有人知道如何解决这个问题吗?谢谢