熵的应用(一)——qjzcy的博客

熵的应用(一)——工作学习中的一点体会

最近在做一个广告重点词的项目,用到了最大熵做特征,感觉这个概念经常被用到,比如最大熵隐马,条件随机场,都有涉及,这里总结一下。


目录:
一、含义
二、公式
三、公式理解
四、小应用
五、最大熵模型


一、 含义
熵是一个算法经常用到的概念,通俗来说就是越平均熵越大,并且这个世界里的东西一定是趋向于熵最大。比如冰火在一起,一定是趋于平均温度。有钱人和没钱人在一起?为什么不是趋于共产主义!!!好吧扯远了~~

二、 熵值公式:
这里写图片描述
三、 公式理解:
就拿刚刚冰火的列子:
1、极端情况百分百的冰或者火,于是概率p(x)=1/0,取1的时候log(1/1)为0, 取0的时候p(x)是log(1/p(x))部分的高阶无穷小,所以还是0。综合H(x)为0
2、均匀分布的时候,p(x)=50%,最后结果为H(x)=-0.5*log(0.5)+( -0.5*log(0.5)),怎么算都比0大
3、在冰火极端情况和均衡情况之间分布,这个大家可以随便取个值计算,肯定在0~ H(x)之间
所以我们发现均衡分布熵值最大,同时我们也发现如果没有约束,事物总是向熵最大靠近,比较冰火就会趋于温度综和

四、 小应用
来个小应用吧,在一个句子什么词最重要,我们发现分布越均衡,也就是跟着的词越平均,则这个词越不重要。
比如“手机”,左右熵都很高这里写图片描述 于是这个词不重要。相反“小米”这个词,左右熵相对低 这里写图片描述,于是它的重要度就高
熵值归一化:
这里我们发现个问题,出现次数越多的词信息熵越大,比如都是均衡分布出现3次H(x)=log3,出现5次则为log5,我们需要对熵值进行归一化,归一化的方法为除以理论最大值log(N),N为出现的种类改进后的公式为
这里写图片描述
问题2:还有个问题是首尾的词因为接的词少,也会造成熵比较大,需要专门处理,大家有兴趣可以试验一下怎么处理比较好

五、 最大熵模型
一般来说我们常见的算法模型都是需要求一个熵值的最值,为啥要求最值呢,这个是非线性规划中的条件,求个极值,
非线性规划:
http://blog.csdn.net/qjzcy/article/details/51727741
最大熵的算法模型和条件随机场差不多,这里偷个懒就不写了,贴个条件随机场的吧
http://blog.csdn.net/qjzcy/article/details/51728194

权法是一种客观赋值方法,可以用来确定指标的权重。在使用过程中,权法根据各指标的变异程度,利用信息计算出各指标的权,再通过权对各指标的权重进行修正,从而得到较为客观的指标权重。具体实现过程可以使用Matlab来进行计算。 首先,需要构造评价矩阵Ymn,然后对数据进行处理。对于越小越优的指标,可以使用越小越优型处理,即将指标的最大值减去该指标的原始值。对于某点最优型指标,可以根据给定的最优型数值,计算指标的最优型得分。接下来,可以使用数据标准化方法(如mapminmax函数)对数据进行标准化,将数据转换到指定的区间。然后,可以计算每个指标的信息,根据信息计算各指标的权重。最后,可以根据计算得到的权重,计算指标的得分。 在Matlab中,可以使用如下代码实现权法的计算: ```matlab clc; clear; % 读取数据 data = xlsread('D:\桌面\shangquan.xlsx'); data = data(:,3:end); % 只取指标数据 % 指标正向化处理 data1 = data; % 越小越优型处理 index = [3,4]; % 越小越优指标位置 for i = 1:length(index) data1(:,index(i)) = max(data(:,index(i))) - data(:,index(i)); end % 某点最优型指标处理 index = [5]; a = 90; % 最优型数值 for i = 1:length(index) data1(:,index(i)) = 1 - abs(data(:,index(i)) - a) / max(abs(data(:,index(i)) - a)); end % 数据标准化 data2 = mapminmax(data1',0.002,1); % 标准化到0.002-1区间 data2 = data2'; % 计算信息 [m,n = size(data2); p = zeros(m,n); for j = 1:n p(:,j) = data2(:,j) / sum(data2(:,j)); end for j = 1:n E(j) = -1/log(m) * sum(p(:,j) .* log(p(:,j))); end % 计算权重 w = (1 - E) / sum(1 - E); % 计算得分 s = data2 * w'; Score = 100 * s / max(s); disp('12个银行分别得分为:') disp(Score) ``` 这段代码可以计算出给定数据集中各指标的权重和得分,其中包括了评价矩阵的构造、指标处理、标准化、信息计算、权重计算和得分计算等步骤。最后输出每个银行的得分。 请注意,以上代码仅为示例,具体实现过程可能会根据实际需求和数据格式的不同而有所变化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【综合评价分析】权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列](https://blog.csdn.net/m0_52474147/article/details/127176733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [权法 —— matlab](https://blog.csdn.net/qq_25990967/article/details/122588120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值