求解的关键在引用计数,可以使用字典,也可以使用 collections 模块中的 Counter。
统计 label(序列)各个标签值出现的次数
统计 label(序列)各个标签值出现的次数,来计算 label 的概率分布,或者样本集的香农熵。
法一:使用字典
labelCnt = {}
for featVec in dataset:
label = featVec[-1]
if label not in labelCnt:
labelCnt[label] = 0
labelCnt[label] += 1
法二:使用字典
from collections import Counter
labels = []
for featVec in dataset:
labels.append(featVec[-1])
labelCnt = Counter(labels)
次数出现最多的标签
获得次数出现最多的标签,用于投票表决;
使用 Counter 类定义的引用计数,本质还是一个 dict,统计出现次数最多的标签,二者的使用是几乎相同的,都是先排序。这里关注 sorted 函数 key 参数的指定。
法一:key 使用匿名函数
sortedClassCnt = sorted(labelCnt.items(), key=lambda item: item[1], reverse=True)
return sortedClassCnt[0][0]
法二:key 使用 operator.itemgetter
import operator
sortedClassCnt = sorted(labelCnt.items(), key=operator.itemgetter(1), resverse=True)
return sortedClassCnt[0][0]