0

我想实现一个算法来从数据集中构建决策树。 我写了一个函数来计算子集和特定分区之间的信息增益,然后尝试所有可能的分区,并希望选择“最佳”分区,因为它具有最低的熵。 此过程必须是递归的,因此,在第一次迭代之后,它需要为您在上一步中获得的每个分区子集工作。Mathematica:零件分配

这些是数据:

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 

有任何关于如何解决这个任何想法? 感谢

回答

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 ;)