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 に答える