Mathematica: part assignment

拟墨画扇 提交于 2019-12-12 03:52:41

问题


I'm trying to implement an algorithm to build a decision tree from a dataset. I wrote a function to calculate the information gain between a subset and a particular partition, then I try all the possible partition and want to choose the "best" partition, in the sense that it's got the lowest entropy. This procedure must be recursive, hence, after the first iteration, it needs to work for every subset of the partition you got in the previous step.

These are the data:

X = {{1, 0, 1, 1}, {1, 1, 1, 1}, {0, 1, 1, 1}, {1, 1, 1, 0}, {1, 1, 0, 0}}

Xfin[0]=X

This is the function: for every subset of the partition, it tries all the possible partitions and calculate the IG. Then it selects the partition with 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]]]]

then I call it:

Partizioneottimale[Xfin, 0]

and it works fine for the first one:

 Xfin[1]

 {{{1, 0, 1, 1}, {1, 1, 1, 1}, {0, 1, 1, 1}, {1, 1, 1, 0}}, {{1, 0, 0, 0}}}

That is the partition with lowest entropy.

But it doesn't work for the next ones:

  Partizioneottimale[Xfin, 1]
  Set delayed::steps : Xfin[1+1] in the part assignment is not a symbol

Has anybody any idea about how to solve this? Thanks


回答1:


without unraveling all your logic a simple fix is this:

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


来源:https://stackoverflow.com/questions/16500401/mathematica-part-assignment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!