5.10 決策樹與ID3算法

1. 決策樹

https://blog.csdn.net/dorisi_h_n_q/article/details/82787295

1.1 決策樹定義

決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。決策過程是從根節(jié)點開始,測試待分類項中相應的特征屬性彭沼,并按照其值選擇輸出分支,直到到達葉子節(jié)點奢啥,將葉子節(jié)點存放的類別作為決策結果耐量。

1.2 決策樹原理

決策樹的關鍵步驟是分裂屬性糜俗。就是在某節(jié)點處按某一特征屬性的不同劃分構造不同的分支校翔,目標是讓各個分裂子集盡可能地“純”弟跑。即讓一個分裂子集中待分類項屬于同一類別。

簡而言之防症,決策樹的劃分原則就是:將無序的數(shù)據(jù)變得更加有序

分裂屬性分為三種不同的情況

  • 屬性是離散值且不要求生成二叉決策樹窖认。此時用屬性的每一個劃分作為一個分支。
  • 屬性是離散值且要求生成二叉決策樹告希。此時使用屬性劃分的一個子集進行測試,按照“屬于此子集”和“不屬于此子集”分成兩個分支搁料。
  • 屬性是連續(xù)值新啼。此時確定一個值作為分裂點split_point寨闹,按照>split_point和<=split_point生成兩個分支。

構造決策樹的關鍵性內(nèi)容是進行屬性選擇度量指么,屬性選擇度量(找一種計算方式來衡量怎么劃分更劃算)是一種選擇分裂準則酝惧,它決定了拓撲結構及分裂點split_point的選擇。

屬性選擇度量算法有很多伯诬,一般使用自頂向下遞歸分治法晚唇,并采用不回溯的貪心策略。這里介紹常用的ID3算法盗似。

貪心算法(又稱貪婪算法)是指哩陕,在對問題求解時,總是做出在當前看來是最好的選擇赫舒。也就是說悍及,不從整體最優(yōu)上加以考慮,所做出的是在某種意義上的局部最優(yōu)解接癌。

2.ID3算法

2.1 熵

此概念最早起源于物理學心赶,是用來度量一個熱力學系統(tǒng)的無序程度。
而在信息學里面缺猛,熵是對不確定性的度量缨叫。
在1948年,香農(nóng)引入了信息熵荔燎,將其定義為離散隨機事件出現(xiàn)的概率耻姥,一個系統(tǒng)越是有序,信息熵就越低湖雹,反之一個系統(tǒng)越是混亂咏闪,它的信息熵就越高。所以信息熵可以被認為是系統(tǒng)有序化程度的一個度量摔吏。

熵定義為信息的期望值鸽嫂,在明晰這個概念之前,我們必須知道信息的定義征讲。如果待分類的事務可能劃分在多個分類之中据某,則符號x的信息定義為:

image.png
image.png
image.png

2.2 信息增益

在劃分數(shù)據(jù)集之前之后信息發(fā)生的變化稱為信息增益。
知道如何計算信息增益诗箍,就可計算每個特征值劃分數(shù)據(jù)集獲得的信息增益癣籽,獲得信息增益最高的特征就是最好的選擇。

條件熵 表示在已知隨機變量的條件下隨機變量的不確定性滤祖,隨機變量X給定的條件下隨機變量Y的條
件熵(conditional entropy) 筷狼,定義X給定條件下Y的條件概率分布的熵對X的數(shù)學期望:


image.png
image.png
image.png

根據(jù)上面公式,我們假設將訓練集D按屬性A進行劃分匠童,則A對D劃分的期望信息為


image.png

則信息增益為如下兩者的差值


image.png

2.3 ID3算法

ID3算法就是在每次需要分裂時埂材,計算每個屬性的增益率,然后選擇增益率最大的屬性進行分裂

步驟:1. 對當前樣本集合汤求,計算所有屬性的信息增益俏险;

  1. 選擇信息增益最?的屬性作為測試屬性严拒,把測試屬性取值相同的樣本劃為同?個子樣本集;
  2. 若?樣本集的類別屬性只含有單個屬性竖独,則分?為葉?節(jié)點裤唠, 判斷其屬性值并標上相應的符號,然后返回調用處莹痢; 否則對子樣本集遞歸調用此算法种蘸。

2.4.1 cls算法

是最原始的決策樹分類算法,基本流程是格二,從一棵空數(shù)出發(fā)劈彪,不斷的從決策表選取屬性加入數(shù)的生長過程中,直到?jīng)Q策樹可以滿足分類要求為止顶猜。CLS算法存在的主要問題是在新增屬性選取時有很大的隨機性沧奴。ID3算法是對CLS算法的改進,主要是摒棄了屬性選擇的隨機性长窄。

2.4.2 c4.5算法

基于ID3算法的改進滔吠,主要包括:使用信息增益比替換了信息增益下降度作為屬性選擇的標準;在決策樹構造的同時進行剪枝操作挠日;避免了樹的過度擬合情況疮绷;可以對不完整屬性和連續(xù)型數(shù)據(jù)進行處理;使用k交叉驗證降低了計算復雜度嚣潜;針對數(shù)據(jù)構成形式冬骚,提升了算法的普適性。

信息增益值的大小相對于訓練數(shù)據(jù)集而言的懂算,并沒有絕對意義只冻,在分類問題困難時,也就是說在訓練數(shù)據(jù)集經(jīng)驗熵大的時候计技,信息增益值會偏大喜德,反之信息增益值會偏小,使用信息增益比可以對這個問題進行校正垮媒,這是特征選擇
的另一個標準舍悯。
特征對訓練數(shù)據(jù)集的信息增益比定義為其信息增益gR( D,A) 與訓練數(shù)據(jù)集的經(jīng)驗熵g(D,A)之比 :

gR(D,A) = g(D,A) / H(D)

2.5 CART(Classification and RegressionTrees, CART):

sklearn的決策樹模型就是一個CART樹。是一種二分遞歸分割技術睡雇,把當前樣本劃分為兩個子樣本萌衬,使得生成的每個非葉子節(jié)點都有兩個分支,因此它抱,CART算法生成的決策樹是結構簡潔的二叉樹秕豫。
分類回歸樹算法(Classification and Regression Trees,簡稱CART算法)是一種基于二分遞歸分割技術的算法。該算法是將當前的樣本集抗愁,分為兩個樣本子集馁蒂,這樣做就使得每一個非葉子節(jié)點最多只有兩個分支。因此蜘腌,使用CART
算法所建立的決策樹是一棵二叉樹沫屡,樹的結構簡單,與其它決策樹算法相比撮珠,由該算法生成的決策樹模型分類規(guī)則較少沮脖。

CART分類算法的基本思想是:對訓練樣本集進行遞歸劃分自變量空間,并依次建立決策樹模型芯急,然后采用驗證數(shù)據(jù)的方法進行樹枝修剪勺届,從而得到一顆符合要求的決策樹分類模型。

CART分類算法和C4.5算法一樣既可以處理離散型數(shù)據(jù)娶耍,也可以處理連續(xù)型數(shù)據(jù)免姿。CART分類算法是根據(jù)基尼(gini)系
數(shù)來選擇測試屬性,gini系數(shù)的值越小榕酒,劃分效果越好胚膊。設樣本集合為T,則T的gini系數(shù)值可由下式計算:


image.png
image.png

CART算法優(yōu)點:除了具有一般決策樹的高準確性想鹰、高效性紊婉、模式簡單等特點外,還具有一些自身的特點辑舷。
如喻犁,CART算法對目標變量和預測變量在概率分布上沒有要求,這樣就避免了因目標變量與預測變量概率分布的不同造成的結果何缓;CART算法能夠處理空缺值肢础,這樣就避免了因空缺值造成的偏差;CART算法能夠處理孤立的葉子結點歌殃,這樣可以避免因為數(shù)據(jù)集中與其它數(shù)據(jù)集具有不同的屬性的數(shù)據(jù)對進一步分支產(chǎn)生影響乔妈;CART算法使用的是二元分支,能夠充分地運用數(shù)據(jù)集中的全部數(shù)據(jù)氓皱,進而發(fā)現(xiàn)全部樹的結構路召;比其它模型更容易理解,從模型中得到的規(guī)則能獲得非常直觀的解釋波材。

CART算法缺點:CART算法是一種大容量樣本集挖掘算法股淡,當樣本集比較小時不夠穩(wěn)定;要求被選擇的屬性只能產(chǎn)生兩個子結點廷区,當類別過多時唯灵,錯誤可能增加得比較快。

2.6 sklearn算法的參數(shù)說明:

sklearn.tree.DecisionTreeClassifier

skleanr決策樹模型參數(shù)含義如下所示:
criterion:gini或者entropy,前者是基尼系數(shù)隙轻,后者是信息熵埠帕。
splitter: best or random 前者是在所有特征中找最好的切分點后者是在部分特征中垢揩,默認的”best”適合樣本量不大的時候,而如果樣本數(shù)據(jù)量非常大敛瓷,此時決策樹構建推薦”random” 叁巨。
max_features:None(所有),log2呐籽,sqrt锋勺,N 特征小于50的時候一般使用所有的
max_depth: int or None, optional (default=None) 設置決策隨機森林中的決策樹的最大深度,深度越大狡蝶,越容易過擬合庶橱,推薦樹的深度為:5-20之間。
min_samples_split:設置結點的最小樣本數(shù)量贪惹,當樣本數(shù)量可能小于此值時苏章,結點將不會在劃分。
min_samples_leaf: 這個值限制了葉子節(jié)點最少的樣本數(shù)馍乙,如果某葉子節(jié)點數(shù)目小于樣本數(shù)布近,則會和兄弟節(jié)點一起被剪枝。
min_weight_fraction_leaf: 這個值限制了葉子節(jié)點所有樣本權重和的最小值丝格,如果小于這個值撑瞧,則會和兄弟節(jié)點一起被剪枝默認是0,就是不考慮權重問題显蝌。
max_leaf_nodes: 通過限制最大葉子節(jié)點數(shù)预伺,可以防止過擬合,默認是"None”曼尊,即不限制最大的葉子節(jié)點
數(shù)酬诀。
class_weight: 指定樣本各類別的的權重,主要是為了防止訓練集某些類別的樣本過多導致訓練的決策樹過于偏向這些類別骆撇。這里可以自己指定各個樣本的權重瞒御,如果使用“balanced”,則算法會自己計算權重神郊,樣本量少的類別所對應的樣本權重會高肴裙。
min_impurity_split: 這個值限制了決策樹的增長,如果某節(jié)點的不純度(基尼系數(shù)涌乳,信息增益蜻懦,均方差,絕對差)小于這個閾值則該節(jié)點不再生成子節(jié)點夕晓。即為葉子節(jié)點 宛乃。

2.7 安裝graphviz.msi可以繪制決策樹

1.安裝graphviz.msi , 一路next即可

  1. 添加環(huán)境變量: 把graphviz 安裝包下的bin文件夾路徑添加到 系統(tǒng)變量的path里面去。
    3.終端輸入dot -version 出現(xiàn)版本信息為安裝成功征炼。
# 繪制決策樹
import graphviz
from sklean import tree
dot_data = tree.export_graphviz(clf, out_file=None,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph

3. ID3算法實現(xiàn)

image.png

image.png

ID3算法就是在每次需要分裂時,計算每個屬性的增益率谆奥,然后選擇增益率最大的屬性進行分裂

import numpy as np
import math
# 類別就是【賬號是否真實】p(no) 3/10 p(yes) 7/10

原始熵值:
info_D = -0.3math.log2(0.3) -0.7math.log2(0.7)
info_D #0.8812908992306927

按照好友密度劃分的信息增益:


image.png

info_s = -(3/4)math.log2(3/4) -(1/4)math.log2(1/4)
info_m = 0
info_l = 0
info_F_D = 0.4info_s + 0.4info_m + 0.2*info_l
info_D - info_F_D #信息增益 0.5567796494470396

按照是否使用真實頭像H劃分的信息增益


image.png

info_n = -(2/5)math.log2(2/5) -(3/5)math.log2(3/5)
info_y = -(1/5)math.log2(1/5) -(4/5)math.log2(4/5)
info_H_D = 0.5info_n + 0.5info_y
info_D - info_H_D # 信息增益 0.034851554559677256

**所以雄右,按先按好友密度劃分的信息增益比按真實頭像劃分的大纺讲。應先按好友密度劃分。

image.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熬甚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子乡括,更是在濱河造成了極大的恐慌,老刑警劉巖诲泌,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敷扫,居然都是意外死亡哀蘑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門葵第,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绘迁,“玉大人,你說我怎么就攤上這事卒密∽禾ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵哮奇,是天一觀的道長膛腐。 經(jīng)常有香客問我,道長屏镊,這世上最難降的妖魔是什么依疼? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮而芥,結果婚禮上律罢,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好误辑,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布沧踏。 她就那樣靜靜地躺著,像睡著了一般巾钉。 火紅的嫁衣襯著肌膚如雪翘狱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天砰苍,我揣著相機與錄音潦匈,去河邊找鬼。 笑死赚导,一個胖子當著我的面吹牛茬缩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吼旧,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凰锡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了圈暗?” 一聲冷哼從身側響起掂为,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎员串,沒想到半個月后勇哗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡寸齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年访忿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迹恐。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡殴边,死狀恐怖锤岸,靈堂內(nèi)的尸體忽然破棺而出板乙,到底是詐尸還是另有隱情拳氢,我是刑警寧澤馋评,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布留特,位于F島的核電站玛瘸,受9級特大地震影響,放射性物質發(fā)生泄漏市咆。R本人自食惡果不足惜再来,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一芒篷、第九天 我趴在偏房一處隱蔽的房頂上張望针炉。 院中可真熱鬧篡帕,春花似錦贸呢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艾凯。三九已至,卻和暖如春蜡感,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缚忧。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工闪水, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒙具,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓持钉,卻偏偏與公主長得像每强,于是被迫代替她去往敵國和親空执。 傳聞我的和親對象是個殘疾皇子穗椅,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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