熵权法求权重
熵權(quán)法求權(quán)重
- 創(chuàng)作背景
- 知識補充
- 熵
- 熵權(quán)法求權(quán)重過程
- 一、特征縮放
- 歸一化
- 標準化
- 注
- 二、求熵
- 三、求權(quán)重
- 實戰(zhàn)
- 一、特征縮放
- 二、求各特征的熵
- 三、求個特征權(quán)重
- 結(jié)尾
創(chuàng)作背景
最近本菜雞在幫別人搞個 熵權(quán)法求權(quán)重 ,給的數(shù)據(jù)是差不多 5 份打分表,有字段和對應(yīng)的打分,要我求一下 每個字段對應(yīng)的權(quán)重 ,對于這點小忙我還是很樂意幫的,本片博客就用來記錄一下過程。
如果覺得我這篇文章寫的好的話,能不能給我 點個贊 ,評論 一波。
如果要點個 關(guān)注 的話也不是不可以🤗。
知識補充
讓我們了解一下熵權(quán)法,參考 這篇文章 。
熵
既然是要根據(jù) 熵 來求權(quán)重,我們也得知道 熵 是什么。
熵 是 統(tǒng)計物理與信息論術(shù)語 ,泛指某些 物質(zhì)系統(tǒng)狀態(tài)的 一種 量度,某些物質(zhì)系統(tǒng)狀態(tài)可能出現(xiàn)的程度。系統(tǒng) 越混亂 ,熵越大 。
假定 P(x=xi)=piP(x=x_i)=p_iP(x=xi?)=pi?,則 熵 公式如下:
H(x)=?∑i=1npilog?npiH(x)=- \sum^{n}_{i=1}{p_i \log_{n}{p_i}} H(x)=?i=1∑n?pi?logn?pi?
其中 n 代表分類問題中 類別個數(shù) 。
而 多分類 問題可以轉(zhuǎn)化為 多個二分類 問題。
假設(shè)特征 A 取值 X∈X1,X2,…,XiX \in {X_1, X_2, \dots ,X_i}X∈X1?,X2?,…,Xi? ,每個特征概率取值 pi=Xi∑j=1nXjp_i=\frac{X_i}{\displaystyle \sum^{n}_{j=1}{Xj}}pi?=j=1∑n?XjXi?? ,則二分類的 熵 公式如下:
H(x)=?pilog?2pi?(1?p)log?2(1?pi)H(x)=- p_i \log_{2}{p_i} - (1-p) \log_{2}{(1-p_i)} H(x)=?pi?log2?pi??(1?p)log2?(1?pi?)
其中,pi=∈(0,1)p_i= \in (0, 1)pi?=∈(0,1) 。
- pi=1or0p_i = 1 \: or \: 0pi?=1or0 時,H(x)=0H(x)=0H(x)=0 。
- pi=12p_i = \frac{1}{2}pi?=21? 時,H(x)=1H(x)=1H(x)=1 。
圖像如下
熵權(quán)法求權(quán)重過程
這是本篇文章主要部分。
輸入數(shù)據(jù)是 已經(jīng)過數(shù)據(jù)預(yù)處理的訓(xùn)練數(shù)據(jù) 。
熵權(quán)法求權(quán)重 分為以下幾步:
一、特征縮放
特征縮放一般有兩種方法:歸一化 和 標準化 。
歸一化
公式如下:
x′=x?XminXmax?Xminx' = \frac{x-{X}_{min}}{{X}_{max}-{X}_{min}} x′=Xmax??Xmin?x?Xmin??
就是將原數(shù)據(jù) [Xmin,Xmax][{X}_{min}, {X}_{max}][Xmin?,Xmax?] 這個區(qū)間縮放到 [0,1][0, 1][0,1] 區(qū)間內(nèi)。
缺點:當(dāng) 數(shù)據(jù)發(fā)生變化(增加、刪除、修改) 時,最大值和最小值 會發(fā)生變化,需要 重新計算 。
標準化
公式如下:
x′=x?μσx' = \frac{x-\mu}{\sigma} x′=σx?μ?
其中,μ\muμ 和 σ\sigmaσ 分別代表數(shù)據(jù)的 均值 和 方差 。
注
這里每種特征縮放方法只列舉了 一個公式 ,而實際上二者都有 多個公式 ,感興趣的朋友可以自行百度。
二、求熵
使用上述 熵 的公式,即:
H(x)=?∑i=1npilog?npiH(x)=- \sum^{n}_{i=1}{p_i \log_{n}{p_i}} H(x)=?i=1∑n?pi?logn?pi?
三、求權(quán)重
公式如下:
Wi=1?Eik?∑EiW_i=\frac{1-E_i}{k- \sum{E_i}} Wi?=k?∑Ei?1?Ei??
其中,k 代表 特征個數(shù) 。
這就求出了各特征對應(yīng)的權(quán)重。
實戰(zhàn)
假設(shè)數(shù)據(jù)如下:
| 3 | 4 | 3 | 5 | 5 | 5 | 3 | 1 | 4 | 4 | 4 | 4 |
| 2 | 3 | 2 | 4 | 3 | 2 | 1 | 2 | 3 | 3 | 4 | 4 |
| 5 | 4 | 2 | 4 | 5 | 4 | 4 | 3 | 5 | 5 | 4 | 3 |
| 5 | 4 | 3 | 3 | 2 | 2 | 3 | 2 | 2 | 3 | 2 | 5 |
| 5 | 3 | 3 | 3 | 5 | 5 | 4 | 2 | 3 | 5 | 5 | 3 |
其中,Aa1 到 Bc2 為各個特征,每個特征有 5 條數(shù)據(jù),取值在 [0, 5] ,下面我們就要對各個特征求其所對應(yīng)的權(quán)重。
一、特征縮放
這里我選用 歸一化 。代碼如下:
def scale(data):return (data - data.min()) / (data.max() - data.min())data = data.apply(scale) data結(jié)果如下:
| 0 | 0.333333 | 1.0 | 1.0 | 1.0 | 1.000000 | 1.000000 | 0.666667 | 0.0 | 0.666667 | 0.5 | 0.666667 | 0.5 |
| 1 | 0.000000 | 0.0 | 0.0 | 0.5 | 0.333333 | 0.000000 | 0.000000 | 0.5 | 0.333333 | 0.0 | 0.666667 | 0.5 |
| 2 | 1.000000 | 1.0 | 0.0 | 0.5 | 1.000000 | 0.666667 | 1.000000 | 1.0 | 1.000000 | 1.0 | 0.666667 | 0.0 |
| 3 | 1.000000 | 1.0 | 1.0 | 0.0 | 0.000000 | 0.000000 | 0.666667 | 0.5 | 0.000000 | 0.0 | 0.000000 | 1.0 |
| 4 | 1.000000 | 0.0 | 1.0 | 0.0 | 1.000000 | 1.000000 | 1.000000 | 0.5 | 0.333333 | 1.0 | 1.000000 | 0.0 |
二、求各特征的熵
代碼如下:
In[]: def get_entropy(data):data = data.map(lambda x: x / data.sum())return -1 / np.log(data.size) * data.map(lambda x: x * np.log(x)).sum()data = data.apply(get_entropy)data.name = 'entropy'data---------------------------------------------------------------------Out[]: Aa1 0.816331Aa2 0.682606Aa3 0.682606Aa4 0.646015Ab1 0.816331Ab2 0.672406Ba1 0.848842Ba2 0.827729Bb1 0.793466Bb2 0.655459Bc1 0.850559Bc2 0.646015Name: entropy, dtype: float64三、求個特征權(quán)重
In[]: def keep_weight(entropy_s):return entropy_s.map(lambda x: (1-x) / (entropy_s.size-entropy_s.sum()))weight_s = keep_weight(data)weight_s.name = 'weight'weight_s---------------------------------------------------------------------Out[]: Aa1 0.059991Aa2 0.103668Aa3 0.103668Aa4 0.115620Ab1 0.059991Ab2 0.107000Ba1 0.049372Ba2 0.056268Bb1 0.067459Bb2 0.112535Bc1 0.048811Bc2 0.115620Name: weight, dtype: float64看一下權(quán)重之和:
In[]: weight_s.sum()---------------------------------------------------------------------Out[]: 1.0剛剛好。完成任務(wù)~~~
結(jié)尾
有想要一起學(xué)習(xí) python 的小伙伴可以 私信我 進群哦。
以上就是我要分享的內(nèi)容,因為學(xué)識尚淺,會有不足,還請各位大佬指正。
有什么問題也可在評論區(qū)留言。
總結(jié)
- 上一篇: CAPL如何组装自定义报文
- 下一篇: MyEclipse暗黑主题设置