【问题标题】:Mathematica: part assignmentMathematica:部分分配
【发布时间】:2013-05-06 05:00:53
【问题描述】:

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

这些是数据:

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

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

【问题讨论】:

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


    【解决方案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 ; )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多