基尼指数计算

一种简单的基尼指数计算方法

训练数据:remainData

[[Rid, Student, Age, BuysComputer],

[1, No, Senior, Yes],

[2, No, MiddleAged, Yes],

[3, Yes, MiddleAged, Yes],

[4, No, Senior, No],

[5, Yes, Senior, Yes]]

 

目标:计算属性Student的基尼指数值:

 

第一步:获取属性Student在训练数据中值划分即取值{Yes,No}

第二步:统计Student属性每个取值在训练数据中出现的次数StudentYes = 2, StudentNo= 3

       计算每个取值占比:

       posProbably = 1.0 * StudentYes /(remainData.length - 1); 

       negProbably = 1 - StudentYes;

第三步:保存属性的值划分时的最小的基尼指数

1.  当Student=No时候:

(1)正例:BuysComputerYes=2,

          反例:BuysComputerNo=1;

          正例占比:a=2/(1+2)= 2/3 ;

          负例占比:b=1/(1+2)=1/3

          基尼指数:giniNo =1- a*a – b*b

(2)Student=Yes时候

          正例:BuysComputerYes=2,

          反例:BuysComputerNo=0;

          正例占比:a=2/(2+0)= 1 ;

          负例占比:b=0/(0+2)=0

          基尼指数:giniYes =1- a*a – b*b

          tenpGini += posProbably* giniNo

          tempGini+= negProbably* giniYes

          tempGiniNo=tempGini;

 

2. 当Student=Yes时候:

(1)Student=Yes时候

          正例:BuysComputerYes=2,

          反例:BuysComputerNo=0;

          正例占比:a=2/(2+0)= 1 ;

          负例占比:b=0/(0+2)=0

          基尼指数:giniYes =1- a*a – b*b

(2)当Student=No时候:

         正例:BuysComputerYes=2,

         反例:BuysComputerNo=1;

         正例占比:a=2/(1+2)= 2/3 ;

         负例占比:b=1/(1+2)=1/3

         基尼指数:giniNo =1- a*a – b*b

        tenpGini += posProbably* giniNo

        tempGini+= negProbably* giniYes

        tempGiniYes=tempGini;

   

说明:计算tempGiniNo ,tempGiniYes时,两者其实是一样的,只是乘以posProbably和negProbably顺序进行了调换,主要是为了保证每种取值都能作为正例和反例进行计算一次。

 

第四步:GiniStudent={tempGiniNo ,tempGiniYes}。

 

参考:http://blog.csdn.net/androidlushangderen/article/details/42558235

你可能感兴趣的:(算法学习,基尼指数)