from math import log
def create_data():
#'''创建样本'''
data=[[1,1,'Y'],
[1,1,'Y'],
[1,0,'N'],
[0,1,'N'],
[0,1,'N'],
]
labels=['no surfacing','flippers']
return data,labels
def shannon_entropy(data):
enteries=len(data)
#样本总数
label_count={}
#创建字典用来统计类别出现的频率
for v in data:
#遍历样本
current_label=v[-1]
#获取当前类别
if current_label not in label_count.keys():
label_count[current_label]=0
#判断当前类别是否在字典中,不在的话计数为0
label_count[current_label]+=1
#对类别计数
entropy=0.0
#初始熵为0
for key in label_count:
#遍历字典
prob=float(label_count[key])/enteries
#计算各类类别在样本总数中出现的概率
entropy-=prob*log(prob,2)
#计算香农熵,公式:H(x)=P(x)log2P(x) 以2为底的对数
return entropy
计算香农熵
最新推荐文章于 2024-03-21 11:04:14 发布