以下是《集体编程智慧中的代码》
def
uniquecounts(rows):
results
=
{}
for
row
in
rows:
# The result is the last column
r
=
row[
len
(row)
-
1
]
if
r
not
in
results: results[r]
=
0
results[r]
+
=
1
return
results
def
giniimpurity(rows):
total
=
len
(rows)
counts
=
uniquecounts(rows)
imp
=
0
for
k1
in
counts:
p1
=
float
(counts[k1])
/
total
#imp+=p1*p1
for
k2
in
counts:
if
k1
=
=
k2:
continue
p2
=
float
(counts[k2])
/
total
imp
+
=
p1
*
p2
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)
等式左边就是基尼不纯度