我正在尝试实现一种算法来从数据集构建决策树。 我写了一个函数来计算子集和特定分区之间的信息增益,然后我尝试所有可能的分区,并且想要选择“最佳”分区,因为它具有最低的熵。 此过程必须是递归的,因此,在第一次迭代之后,它需要适用于您在上一步中获得的每个分区子集。
这些是数据:
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
有没有人知道如何解决这个问题? 感谢
答案 0 :(得分:1)
没有解开你的所有逻辑,一个简单的解决方法就是:
Partizioneottimale[X_, n_] := (
xnp1 = Table[Null, {Length[Flatten[X[n], n - 1]]}] ;
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]]],
xnp1[[l]] = Partizione[X[n][[l]], v]]]] ;
X[n+1] = xnp1 ; )