一、知識(shí)點(diǎn)介紹:
決策樹方法在分類、預(yù)測、規(guī)則提取等領(lǐng)域有著廣泛的應(yīng)用。決策樹是一樹狀結(jié)構(gòu),它的每一個(gè)葉節(jié)點(diǎn)對(duì)應(yīng)著一個(gè)分類,非葉節(jié)點(diǎn)對(duì)應(yīng)著在某個(gè)屬相上的劃分,根據(jù)樣本在該屬性上的不同取值將其劃分成若干個(gè)子集。構(gòu)造決策樹的核心問題是如何在每一步選擇適當(dāng)?shù)膶傩詫?duì)樣本進(jìn)行劃分。
本例子中采用ID3算法構(gòu)建決策樹模型的,在開始之前我們先來理解一下ID3算法模型的工作原理:
ID3算法基于信息熵來選擇最佳測試屬性。它選擇當(dāng)前樣本集中具有最大信息增益值的屬性作為測試屬性;
ID3算法根據(jù)信息理論,采用樣本集的不確定性作為衡量劃分好壞的標(biāo)準(zhǔn),用信息增益值度量不確定性;信息增益值越大,不確定性越小。ID3算法在每個(gè)非葉節(jié)點(diǎn)選擇信息增益最大的屬性作為測試屬性,這樣可以得到當(dāng)前情況下最純的拆分,從而得到?jīng)Q策樹。
ID3算法的實(shí)現(xiàn)步奏:
a).計(jì)算總的信息熵。
b).計(jì)算每個(gè)測試屬性的信息熵。
c).計(jì)算需要測試屬性的信息增益值。
d).重復(fù)a-c步奏,針對(duì)每一個(gè)分支結(jié)點(diǎn)繼續(xù)進(jìn)行信息增益的計(jì)算,如此循環(huán)反復(fù),直到?jīng)]有新的結(jié)點(diǎn)分支。最終構(gòu)成一顆決策樹。
二、機(jī)票銷售預(yù)測:
1.定義商業(yè)問題
某航空公司作為國內(nèi)大型航空企業(yè),每天要執(zhí)行數(shù)以百計(jì)的航班任務(wù),運(yùn)送數(shù)萬人前往目的地。對(duì)于企業(yè)的高層來講,了解周末和非周末銷量是否有大的區(qū)別,以及天氣、促銷活動(dòng)這些因數(shù)是否影響機(jī)票銷售量至關(guān)重要。因此,為了讓決策者準(zhǔn)確了解和銷量有關(guān)的一系列影響因素,需要構(gòu)建模型來分析天氣好壞、是否是周末和是否有促銷活動(dòng)對(duì)銷量的影響。
2.數(shù)據(jù)理解
從商業(yè)問題中我們需要收集某航空公司某一段時(shí)間內(nèi)某一個(gè)出發(fā)城市的機(jī)票銷售情況,以及該城市這段時(shí)間的天氣情況。我們收集到的數(shù)據(jù)(示例)如下:

3.數(shù)據(jù)預(yù)處理
對(duì)于天氣屬性,數(shù)據(jù)源中存在多種不同的值,這里將那些屬性值相近的值進(jìn)行類別整合。如天氣為“多云”“多云轉(zhuǎn)晴”“晴”這些屬性值相近,均是適宜外出的天氣,不會(huì)對(duì)出行產(chǎn)生太大的影響,因此將它們歸為一類,天氣屬性設(shè)置為“好”。同理,對(duì)于“雨”“小到中雨”等天氣,均是不適宜出行的天氣,因此將他們歸為一類,天氣屬性設(shè)置為“壞”。
同理將周末屬性設(shè)置為“是”和“否”,將促銷屬性設(shè)置為“是”和“否”。
機(jī)票銷售數(shù)量為數(shù)值型,需要對(duì)屬性進(jìn)行離散化,從銷售數(shù)據(jù)均值進(jìn)行劃分,當(dāng)銷售量高于均值的,銷售數(shù)據(jù)設(shè)置為“高”,反之銷售數(shù)據(jù)設(shè)置為“低”。
整理之后數(shù)據(jù)如下:

4.建立模型
通過Python中pandas和sklearn包中提供的ID3算法實(shí)現(xiàn)。套用該算法計(jì)算出影響機(jī)票銷售的決策樹。
核心代碼如下:
#數(shù)據(jù)是類別的標(biāo)簽,要將類別轉(zhuǎn)換為數(shù)據(jù)
#用1來表示“好”“是”“高”這三個(gè)屬相,用-1來表示“壞”“否”“低”
data[data==u'好'] =1
data[data==u'是'] =1
data[data==u'高'] =1
data[data!=1] = -1
x =data.iloc[:,:3].as_matrix().astype(int)
y =data.iloc[:,3].as_matrix().astype(int)
fromsklearn.treeimportDecisionTreeClassifierasDTC
#建立決策樹模型,基于信息熵
dtc = DTC(criterion='entropy')
#訓(xùn)練模型
dtc.fit(x,y)
5.分析評(píng)測
通過Graphviz繪圖工具將輸出結(jié)果轉(zhuǎn)換為pdf文件。我們可以看到如下結(jié)果:

本圖很專業(yè),需要結(jié)合原始數(shù)據(jù)進(jìn)行理解。
6.分析結(jié)論
最終我們分析得到如下結(jié)果:

結(jié)合本圖和第5節(jié)點(diǎn)的圖可以看到是否是周末、是否有促銷和天氣情況這些因數(shù)是存在多大的幾率導(dǎo)致當(dāng)天機(jī)票銷售走高或走低的。