0

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

这些是数据:

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

有人知道如何解决这个问题吗?谢谢

4

1 回答 1

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 ; )
于 2013-05-13T18:47:43.793 回答