熵相关计算
2018-01-23 16:11
225 查看
#借用下python机器学习中的数据集 import numpy as np from collections import Counter from math import log def CreateDataSet(): dataset = np.array([[1, 1, 'yes' ], [1, 1, 'yes' ], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]) return dataset '''熵 h(x) sum(-p(x)*log p(x) )''' def cal_entropy(dataset,m): #m表示计算dataset中第k列的熵 feature_cnt=Counter(dataset[:,m]) #引入Counter进行频度统计,或者采用字典的方式进行累加计算也可以; length=len(dataset) res= sum( [ -(v/length)*log(v/length) for v in feature_cnt.values() ]) return res datasets=CreateDataSet() #这里label其实没什么用 print(cal_entropy(datasets,2)) '''联合熵,将两列特征拼接好后进行计算 h(x,y) -p(x,y)*log p(x,y)''' def cal_union_entropy(dataset,m,n): #计算两个特征的联合熵 col1=dataset[:,m] col2=dataset[:,n] feature_cnt=Counter([str(col1[i])+col2[i] for i in range(len(col1))]) length=len(dataset) res= sum( [ -(v/length)*log(v/length) for v in feature_cnt.values() ]) return res print(cal_union_entropy(datasets,1,2)) '''条件熵 h(x,y)-h(x) x确定时,y的不确定性 ''' def cal_condition_entropy(dataset,m,n): return cal_union_entropy(dataset,m,n)-cal_entropy(dataset,n) print(cal_condition_entropy(datasets,1,2)) '''交叉熵 h(p,q)=sum(-p*log(q))''' def cal_cross_entropy(dataset,m): feature_cnt=Counter(dataset[:,m]) #引入Counter进行频度统计,或者采用字典的方式进行累加计算也可以; length=len(dataset) prob=[0.5,0.5] ###模拟一个q分布 value=list(feature_cnt.values()) res=sum([ - (value[i]/length)*log(prob[i]) for i in range(len(value)) ]) return res print(cal_cross_entropy(datasets,2)) '''相对熵 kl(p||q)=sum(-p*log(q/p))''' def cal_cross_entropy(dataset,m): feature_cnt=Counter(dataset[:,m]) #引入Counter进行频度统计,或者采用字典的方式进行累加计算也可以; length=len(dataset) prob=[0.5,0.5] ###模拟一个q分布 value=list(feature_cnt.values()) res=sum([ - (value[i]/length)*log(prob[i]*length/value[i]) for i in range(len(value)) ]) return res print(cal_cross_entropy(datasets,2))
分别输出:
0.6730116670092565
1.0549201679861442
0.38190850097688767
0.6931471805599453
0.020135513550688836
相关文章推荐
- PCI传输速率计算相关
- 圆的相关计算(刘汝佳版)
- UIScrollView相关问题(计算分页)
- 数据结构计算相关整理
- 计算几何的相关知识
- ip地址相关计算规律总结
- 计算列相关问题的讨论
- 二叉树定义及相关术语、节点数计算公式、代码实现(遍历,Java版)
- 云计算相关术语
- 【ORACLE】oracle相关时间计算,得到季度第一天、最后一天
- OpenCv 关于矩阵的相关计算函数
- 通过IP地址和子网掩码与运算计算相关地址
- 从Slice_Header学习H.264(三.1)--相关细节之 POC的计算
- 计算时间相关
- DataTable相关:datatable计算功能
- 数值计算相关工具(C#篇)
- 【翻译】行高的相关计算
- Spark streaming&storm流计算的相关对比
- matlab中样本相关系数的计算与测试
- Js获取或计算时间的相关操作