日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【结合实例】信息增益的计算

發(fā)布時間:2025/1/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【结合实例】信息增益的计算 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考文章:

https://www.cnblogs.com/qcloud1001/p/6735352.html

http://blog.csdn.net/lixuemei504/article/details/7278748

http://blog.csdn.net/u013164528/article/details/44359677

信息增益原理介紹

介紹信息增益之前,首先需要介紹一下熵的概念,這是一個物理學概念,表示“一個系統(tǒng)的混亂程度”。系統(tǒng)的不確定性越高,熵就越大。假設集合中的變量X={x1,x2…xn},它對應在集合的概率分別是P={p1,p2…pn}。那么這個集合的熵表示為:

舉一個的例子:對游戲活躍用戶進行分層,分為高活躍、中活躍、低活躍,游戲A按照這個方式劃分,用戶比例分別為20%,30%,50%。游戲B按照這種方式劃分,用戶比例分別為5%,5%,90%。那么游戲A對于這種劃分方式的熵為:

同理游戲B對于這種劃分方式的熵為:

游戲A的熵比游戲B的熵大,所以游戲A的不確定性比游戲B高。用簡單通俗的話來講,游戲B要不就在上升期,要不就在衰退期,它的未來已經(jīng)很確定了,所以熵低。而游戲A的未來有更多的不確定性,它的熵更高。

介紹完熵的概念,我們繼續(xù)看信息增益。為了便于理解,我們還是以一個實際的例子來說明信息增益的概念。假設有下表樣本

!

第一列為QQ,第二列為性別,第三列為活躍度,最后一列用戶是否流失。我們要解決一個問題:性別和活躍度兩個特征,哪個對用戶流失影響更大?我們通過計算信息熵可以解決這個問題。

按照分組統(tǒng)計,我們可以得到如下信息:

其中Positive為正樣本(已流失),Negative為負樣本(未流失),下面的數(shù)值為不同劃分下對應的人數(shù)。那么可得到三個熵:

整體熵:

性別熵:

性別信息增益:

同理計算活躍度熵:

活躍度信息增益:

活躍度的信息增益比性別的信息增益大,也就是說,活躍度對用戶流失的影響比性別大。在做特征選擇或者數(shù)據(jù)分析的時候,我們應該重點考察活躍度這個指標。

使用Hive SQL實現(xiàn)信息熵的計算

從表2中我們不難發(fā)現(xiàn),在計算信息熵和信息增益之前,需要對各維度做匯總計數(shù),計算各公式中出現(xiàn)的分母。Hive SQL中,cube能幫助我們很快的做匯總計算,話不多說直接上代碼:

SELECT t1.feature_name, SUM((ea_all/es)*EA) as gain, SUM(NVL(-(ea_all/ES)*log2(ea_all/es),0)) as info,--計算信息增益率的分母 SUM((ea_all/es)*EA)/SUM(NVL(-(ea_all/es)*log2(ea_all/es),0)) as gain_rate--信息增益率計算 FROM ( SELECT feature_name, feature_value, ea_all, --Key Step2 對于整體熵,要記得更換符號,NVL的出現(xiàn)是防止計算log2(0)得NULL case when feature_value='-100' then -(NVL((ea_positive/ea_all)*log2(ea_positive/ea_all),0)+NVL((ea_negative/ea_all)*log2(ea_negative/ea_all),0)) else (NVL((ea_positive/ea_all)*log2(ea_positive/ea_all),0)+NVL((ea_negative/ea_all)*log2(ea_negative/ea_all),0)) end as EA FROM ( SELECT feature_name, feature_value, SUM(case when is_lost=-100 then user_cnt else 0 end) as ea_all, SUM(case when is_lost=1 then user_cnt else 0 end) as ea_positive, SUM(case when is_lost=0 then user_cnt else 0 end) as ea_negative FROM ( SELECT feature_name, --Key Step1 對feature值和label值做匯總統(tǒng)計,1、用于熵計算的分母,2、計算整體熵情況 case when grouping(feature_value)=1 then '-100' else feature_value end as feature_value, case when grouping(is_lost)=1 then -100 else is_lost end as is_lost, COUNT(1) as user_cnt FROM ( SELECT feature_name,feature_value,is_lost FROM gain_caculate )GROUP BY feature_name,cube(feature_value,is_lost) )GROUP BY feature_name,feature_value ) )t1 join ( --Key Step3信息增益計算時,需要給出樣本總量作為分母 SELECT feature_name,COUNT(1) as es FROM gain_caculate GROUP BY feature_name )t2 on t1.feature_name=t2.feature_name GROUP BY t1.feature_name

數(shù)據(jù)表結構如下:

關鍵步驟說明:

KeyStep1:各特征的熵計算

KeyStep2:各feature下的信息增熵

信息增益計算結果:

結束語:

以上為信息熵計算過程的SQL版本,其關鍵點在于使用cube實現(xiàn)了feature和label所需要的匯總計算。需要的同學只需要按照規(guī)定的表結構填入數(shù)據(jù),修改SQL代碼即可計算信息增益。文中如有不足的地方,還請各位指正。

參考文檔

[1] 算法雜貨鋪——分類算法之決策樹(Decision tree)

http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html

[2] c4.5為什么使用信息增益比來選擇特征?

https://www.zhihu.com/question/22928442

總結

以上是生活随笔為你收集整理的【结合实例】信息增益的计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。