機(jī)器學(xué)習(xí)筆記之信息熵幕帆、信息增益和決策樹(shù)(ID3算法)

決策樹(shù)算法:
優(yōu)點(diǎn):計(jì)算復(fù)雜度不高获搏,輸出結(jié)果易于理解赖条,對(duì)中間值的缺失不敏感,可以處理不相關(guān)的特征數(shù)據(jù)常熙。
缺點(diǎn):可能會(huì)產(chǎn)生過(guò)度匹配問(wèn)題纬乍。
適用數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型。

算法原理:
決策樹(shù)是一個(gè)簡(jiǎn)單的為輸入值選擇標(biāo)簽的流程圖裸卫。這個(gè)流程圖由檢查特征值的決策節(jié)點(diǎn)和分配標(biāo)簽的子葉節(jié)點(diǎn)組成仿贬。為輸入值選擇標(biāo)簽,我們以流程圖的初始決策節(jié)點(diǎn)(即根節(jié)點(diǎn))開(kāi)始墓贿。此節(jié)點(diǎn)包含一個(gè)條件茧泪,檢查輸入值的特征之一,基于該特征的值選擇一個(gè)分支聋袋。沿著這個(gè)描述我們輸入值的分支队伟,我們到到了一個(gè)新的決策節(jié)點(diǎn),有一個(gè)關(guān)于輸入值的特征的新條件幽勒。我們繼續(xù)沿著每個(gè)節(jié)點(diǎn)的條件選擇的分支嗜侮,直到到達(dá)葉節(jié)點(diǎn),它為輸入值提供了一個(gè)標(biāo)簽。


image.png

算法流程:
收集數(shù)據(jù):即建立訓(xùn)練測(cè)試數(shù)據(jù)集锈颗。
準(zhǔn)備數(shù)據(jù):決策樹(shù)構(gòu)造算法只適用于標(biāo)稱型數(shù)據(jù)顷霹,因此數(shù)值型數(shù)據(jù)必須是離散化的。
分析數(shù)據(jù):建立構(gòu)造樹(shù)击吱,構(gòu)造樹(shù)完成后我們檢查圖形是否符合預(yù)期淋淀。
訓(xùn)練數(shù)據(jù):完善構(gòu)造樹(shù)的數(shù)據(jù)結(jié)構(gòu)。
測(cè)試數(shù)據(jù):使用經(jīng)驗(yàn)樹(shù)計(jì)算覆醇。
使用算法:對(duì)實(shí)際數(shù)據(jù)進(jìn)行預(yù)測(cè)绅喉。

ID3算法:
ID3算法(Iterative Dichotomiser 3,迭代二叉樹(shù)3代)是一種貪心算法叫乌,用來(lái)構(gòu)造決策樹(shù)柴罐。ID3算法起源于概念學(xué)習(xí)系統(tǒng)(CLS),以信息熵的下降速度為選取測(cè)試屬性的標(biāo)準(zhǔn)憨奸,即在每個(gè)節(jié)點(diǎn)選取還尚未被用來(lái)劃分的具有最高信息增益的屬性作為劃分標(biāo)準(zhǔn)革屠,然后繼續(xù)這個(gè)過(guò)程,直到生成的決策樹(shù)能完美分類訓(xùn)練樣例排宰。

為了實(shí)現(xiàn)ID3算法我們還需要了解這個(gè)高富帥提出的三個(gè)概念:信息似芝、信息熵和信息增益。

ID3算法

并且由上面的公式我們可以看出其實(shí)信息熵就是信息的期望值板甘,所以我們可知党瓮,信息熵越小,信息的純度越高盐类,也就是信息越少寞奸,在分類領(lǐng)域來(lái)講就是里面包含的類別越少,所以我們可以得出在跳,與初始信息熵的差越大分類效果越好枪萄。

下面我們來(lái)舉個(gè)例子:
買蘋果的時(shí)候,從外觀上評(píng)判一個(gè)蘋果甜不甜有兩個(gè)依據(jù):紅不紅 和 圓不圓 (原諒我淺薄的挑蘋果經(jīng)驗(yàn)吧猫妙。瓷翻。。)

挑蘋果

下面來(lái)算一下啊這5個(gè)蘋果是不是好蘋果的信息熵(只看結(jié)果值):


信息熵

下面給出python求信息熵的代碼

def calcShannonEnt(dataSet):
numEntries = len(dataSet) #數(shù)據(jù)集大小
labelCounts = {}
for featVec in dataSet:
    currentLabel = featVec[-1]   #獲取分類標(biāo)簽
    if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
    labelCounts[currentLabel] += 1  #每個(gè)類中數(shù)據(jù)個(gè)數(shù)統(tǒng)計(jì)
shannonEnt = 0.0
for key in labelCounts:  #信息熵計(jì)算
    prob = float(labelCounts[key])/numEntries
    shannonEnt -= prob * log(prob,2) 
return shannonEnt

我們來(lái)用程序求一下我們這個(gè)小例子的結(jié)果:
小例子的結(jié)果

接下來(lái)我們要尋找怎么分類比較好也就是決策樹(shù)的叉割坠,我們的例子中可以按兩個(gè)方式分類齐帚,紅不紅和圓不圓。彼哼。到的按哪個(gè)分更好一點(diǎn)呢对妄,這下就用到信息增益了:

def chooseBestFeatureToSplit(dataSet):
numFeatures = len(dataSet[0]) - 1  #計(jì)算分類依據(jù)的個(gè)數(shù)
baseEntropy = calcShannonEnt(dataSet)   #計(jì)算原始分類的信息熵
bestInfoGain = 0.0; bestFeature = -1
for i in range(numFeatures):    #對(duì)apple進(jìn)行分類
    featList = [example[i] for example in dataSet]
    uniqueVals = set(featList)
    newEntropy = 0.0
    for value in uniqueVals:  #計(jì)算該種分類的信息熵
        subDataSet = splitDataSet(dataSet, i, value)
        prob = len(subDataSet)/float(len(dataSet))
        newEntropy += prob * calcShannonEnt(subDataSet)     
    infoGain = baseEntropy - newEntropy  #計(jì)算當(dāng)前分類的信息增益
    if (infoGain > bestInfoGain):  #比較那種分類的信息增益最大并返回
        bestInfoGain = infoGain
        bestFeature = i    
return bestFeature

按紅不紅分類的各項(xiàng)數(shù)據(jù)結(jié)果
紅不紅分類

計(jì)算方法為:總的信息熵 - 紅不紅的信息熵
紅不紅的信息增益

我們可以看出,這種分類的信息熵是0.5509775沪羔,它的信息增益是0.419973

如果按照?qǐng)A不圓來(lái)分類:
圓不圓分類

我們可以看出饥伊,這種分類的信息熵是0.8象浑,它的信息增益是0.17095
顯然第一種分類的信息增益較大

我們來(lái)看一下啊兩個(gè)劃分的結(jié)果集:
兩個(gè)劃分的結(jié)果集

確實(shí)第一種方法劃分的較好。

這樣我們的決策樹(shù)也就構(gòu)建好了:
決策樹(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末琅豆,一起剝皮案震驚了整個(gè)濱河市愉豺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茫因,老刑警劉巖蚪拦,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冻押,居然都是意外死亡驰贷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門洛巢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)括袒,“玉大人,你說(shuō)我怎么就攤上這事稿茉∏旅蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵漓库,是天一觀的道長(zhǎng)恃慧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)渺蒿,這世上最難降的妖魔是什么痢士? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮茂装,結(jié)果婚禮上怠蹂,老公的妹妹穿的比我還像新娘。我一直安慰自己训唱,他們只是感情好褥蚯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著况增,像睡著了一般。 火紅的嫁衣襯著肌膚如雪训挡。 梳的紋絲不亂的頭發(fā)上澳骤,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音澜薄,去河邊找鬼为肮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肤京,可吹牛的內(nèi)容都是我干的颊艳。 我是一名探鬼主播茅特,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棋枕!你這毒婦竟也來(lái)了白修?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤重斑,失蹤者是張志新(化名)和其女友劉穎兵睛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窥浪,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祖很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漾脂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片假颇。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骨稿,靈堂內(nèi)的尸體忽然破棺而出拆融,到底是詐尸還是另有隱情,我是刑警寧澤啊终,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布镜豹,位于F島的核電站,受9級(jí)特大地震影響蓝牲,放射性物質(zhì)發(fā)生泄漏趟脂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一例衍、第九天 我趴在偏房一處隱蔽的房頂上張望昔期。 院中可真熱鬧,春花似錦佛玄、人聲如沸硼一。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)般贼。三九已至,卻和暖如春奥吩,著一層夾襖步出監(jiān)牢的瞬間哼蛆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工霞赫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腮介,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓端衰,卻偏偏與公主長(zhǎng)得像叠洗,于是被迫代替她去往敵國(guó)和親甘改。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容