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