Mathematica:部分任务

时间:2013-05-11 18:27:28

标签: recursion wolfram-mathematica variable-assignment partitioning decision-tree

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

这些是数据:

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 个答案:

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