Weka[36]InfoGainAttributeEval源代码分析作者:Koala++屈伟最近要用到特征选择,但需要的特征选择又有点不同,还是看看源码,本文后面介绍了weka中熵的计算,它的计算与公式中不太一样,以前给我专门周末把公式敲岀来,方便大家看。从buildEvaluator开始看:weka中文站人的介绍过一次,这次intintclassIndex=data.classIndex();numInstances=data.numInstances();if(!m_Binarize){DiscretizedisTransform=newDiscretize();disTransform.setUseBetterEncoding(true);disTransform.setInputFormat(data);data=Filter.useFilter(data,disTransform);else{NumericToBinarybinTransform=binTransform.setInputFormat(data);newNumericToBinaryO;data=Filter.useFilter(data,binTransform);看是要离散成二个值,还是多个值。intnumClasses=data.attnbute(classlndex).numValues();//Reservespaceandinitializecountersdouble[][][]counts=newdouble[data.numAttributes()][][];for(intk=0;k
0){log2(classCounts[j]);entropy-=classCounts[j]*Utils.entropy/=(double)data.numlnstances();returnentropy+Utils.log2(data.numlnstancesO);classCounts数组不必说,自然是每个类别的样本数。这里设数样本数为N,类别数为M,类别i的样本数为C(C=classCounts[i])。中间的for循环用公式
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示岀来就是:entropy=-Ci?logCii=0entropy/numlnstanee用公式表示则为:entropy=(-Ci?logCi)/N将N移进去:entropy=(-0/N?logCi)i=0这里令P(Ci)为类别Ci的概率,上式等于:entropy=(-P(Ci)?logCi)i=0最后一步有+log2(numinstanee),即log2N。可以将它视为(N/N)log2n。entropy=-NP(Ci)?logCi+NlogN2i=0NN=Ci+-+Cm。则视为(N/N)log2=(Ci/N)log2n+..+(cm/n)log2n=p(ci)log2N+•••+p(5)log2N。log(a)-log(b)=log(a/b)。代入后:entropy=PQ)?logCi/Ni=0它与一般看到的公式描述就是一致的了:entropy=PQ)?logP(Ci)i=0再看entropyOverClumns中的代码,除return外的代码,公式可表示为:又略有不同:entropy=-Ci?logCii=0而最后的一句又可表示为:entropy=(-O?lnCi)+N?lnN/(N?ln2)i=0与刚才的推导方法一样。