基尼不純度是用於決策樹編程中的一個專業術語。
基尼不純度,是指將來自集合中的某種結果隨機套用在集合中,某一數據項的預期誤差率。
是在進行決策樹編程的時候,對於混雜程度的預測中,一種度量方式。
基本介紹
- 中文名:基尼不純度
- 外文名:Gini impurity
公式,說明,示例代碼,
公式
IG(f)=∑i=1mfi(1−fi)=∑i=1mfi−∑i=1mf2i=1−∑i=1mf2i
說明
- (1)基尼不純度越小,純度越高,集合的有序程度越高,分類的效果越好;
- (2)基尼不純度為 0 時,表示集合類別一致;
- (3)基尼不純度最高(純度最低)時,f1=f2=…=fm=1m,
IG(f)=1−(1m)2×m=1−1m
例,如果集合中的每個數據項都屬於同一分類,此時誤差率為 0。如果有四種可能的結果均勻地分布在集合中,此時的誤差率為1−0.25=0.75;
示例代碼
# coding=utf-8#決策樹,基尼不純度,范芳銘#參考《集體智慧編程》my_data = [['fan', 'C', 'yes', 32, 'None'], ['fang', 'U', 'yes', 23, 'Premium'], ['ming', 'F', 'no', 28, 'Basic']]# 計算每一行數據的可能數量def uniqueCounts(rows): results = {} for row in rows: # 對最後一列的值計算 #r = row[len(row) - 1] # 對倒數第三的值計算,也就是yes 和no 的一列 r = row[len(row) - 3] if r not in results: results[r] = 0 results[r] += 1 return results# 基尼不純度樣例def giniImpurityExample(rows): total = len(rows) print total counts = uniqueCounts(rows) print counts imp = 0 for k1 in counts: p1 = float(counts[k1]) / total print counts[k1] for k2 in counts: if k1 == k2: continue p2 = float(counts[k2]) / total imp += p1 * p2 return impgini = giniImpurityExample(my_data)print 'gini Impurity is %s' % gini
運行結果:gini Impurity is 0.444444444444