集体编程智慧(决策树)-Gini Impurity 公式推导

以下是《集体编程智慧中的代码》

  1. def uniquecounts(rows):
  2.    results={}
  3.    for rowin rows:
  4.       # The result is the last column
  5.       r=row[len(row)-1]
  6.       if rnot in results: results[r]=0
  7.       results[r]+=1
  8.    return results
  9.  
  10. def giniimpurity(rows):
  11.   total=len(rows)
  12.   counts=uniquecounts(rows)
  13.   imp=0
  14.   for k1in counts:
  15.     p1=float(counts[k1])/total
  16.     #imp+=p1*p1
  17.     for k2in counts:
  18.       if k1==k2:continue
  19.       p2=float(counts[k2])/total
  20.       imp+=p1*p2
  21.   return imp#1-imp
基尼不纯度的大概意思是 一个随机事件变成它的对立事件的概率。    例如 一个随机事件X ,P(X=0) = 0.5 ,P(X=1)=0.5 那么基尼不纯度就为    P(X=0)*(1 - P(X=0)) +     P(X=1)*(1 - P(X=1))   = 0.5

公式为:



而本书中并未使用这个公式(其实使用该公式会让代码更加清晰明了),接下来我们解释书中代码使用的数学内容:
假设:A+B+C=1
             (A+B+C)(A+B+C)-(A*A+B*B+C*C)=2*(A*B+A*C+B*C)
             1-( A*A+B*B+C*C)=2*(A*B+A*C+B*C)
             等式左边就是基尼不纯度




你可能感兴趣的:(集体编程智慧)