49 int ReasonableSubsets=0;
54 KnownCases = Cases -
GEnv.ValFreq[0];
63 if ( ReasonableSubsets < 2 )
65 Verbosity(2, fprintf(
Of,
"\tAtt %s: poor split\n",
AttName[Att]))
82 fprintf(
Of,
"\tinf %.3f, gain %.3f\n",
Info[Att],
Gain[Att]);
99 double *HoldFreqRow, SplitFreq[4];
103 double BaseInfo, ThisGain, BestInfo, BestGain=
None;
106 KnownCases = Cases -
GEnv.ValFreq[0];
111 Verbosity(2, fprintf(
Of,
"\tAtt %s",
AttName[Att]))
123 SplitFreq[0] =
GEnv.ValFreq[0];
124 SplitFreq[1] =
GEnv.ValFreq[1];
125 SplitFreq[2] =
GEnv.ValFreq[2];
133 HoldFreqRow[c] +=
GEnv.Freq[v][c];
135 SplitFreq[3] +=
GEnv.ValFreq[v];
138 GEnv.Freq[3] = HoldFreqRow;
144 if (
GEnv.ValFreq[v] > 0 &&
151 if ( ThisGain > BestGain )
154 BestInfo =
TotalInfo(SplitFreq, 0, 3) / Cases;
159 { fprintf(
Of,
"\t\tFrom %s (gain %.3f)",
169 GEnv.Freq[2][c] +=
GEnv.Freq[v+1][c];
170 GEnv.Freq[3][c] -=
GEnv.Freq[v+1][c];
172 SplitFreq[2] +=
GEnv.ValFreq[v];
173 SplitFreq[3] -=
GEnv.ValFreq[v];
176 if ( Tries > 1 ) BestGain -= Log(Tries) / Cases;
183 Verbosity(2, fprintf(
Of,
"\tno gain\n"))
187 Gain[Att] = BestGain;
188 Info[Att] = BestInfo;
192 fprintf(
Of,
"\tcut=%g, inf %.3f, gain %.3f\n",
224 GEnv.ValFreq[v] += (
GEnv.Freq[v][c] =
DFreq[Att][x + (c-1)]);
246 if ( KnownCases < 1E-5 )
return 0.0;
253 ClassCount +=
GEnv.Freq[v][c];
255 GEnv.ClassFreq[c] = ClassCount;
291 Node->
Cut = CutV =
Bar[Att] + 0.1;
296 S = ( v <= CutV ? 2 : 3 );