python决策树分类预测_数据分类预测之python决策树
決策樹是一種樹狀結(jié)構(gòu),它的每一個葉節(jié)點對應(yīng)著一個分類,非葉節(jié)點對應(yīng)著在某個屬性上的劃分,根據(jù)樣本在該屬性上的不同取值將其劃分成若干個子集。對于非純的葉節(jié)點,多數(shù)類的標(biāo)號給出到達(dá)這個節(jié)點的樣本所屬的類。構(gòu)造決策樹的核心問題是在每一步如何選擇適當(dāng)?shù)膶傩詫颖咀霾鸱帧σ粋€分類問題,從已知類標(biāo)記的訓(xùn)練樣本中學(xué)習(xí)并構(gòu)造出決策樹是一個自上而下,分而治之的過程
決策樹方法在分類、預(yù)測、規(guī)則提取等領(lǐng)域有著廣泛應(yīng)用。機(jī)器學(xué)習(xí)研究者J.Ross Quinlan 提出了ID3算法以后,決策樹在機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘領(lǐng)域得到了極大的發(fā)展,之后又提出了C4.5,成為了新的監(jiān)督學(xué)習(xí)算法。另外還有CART分類算法,值得一提的是ID3和CART孫法都是采用類似的方法從訓(xùn)練樣本中學(xué)習(xí)決策樹。
接下來簡單敘述一下這幾個算法:
ID3算法:
其核心是在決策樹的各級節(jié)點上,使用信息增益方法作為屬性的選擇標(biāo)準(zhǔn),來幫助確定生成每個節(jié)點所應(yīng)采用的合適屬性。
C4.5算法:
C4.5決策生成算法相對于ID3算法的重要改進(jìn)是使用信息增益率來選擇節(jié)點屬性。C4.5算法可以克服ID3算法存在的不足:ID3適用于離散的描述屬性,而C4.5算法即能夠處理離散的描述屬性,也可以處理連續(xù)的描述屬性
CART算法:
CART決策樹是一種十分有效的非參數(shù)分類和回歸方法,通過構(gòu)建樹、修建樹、評估樹來構(gòu)建一個二叉樹。當(dāng)終結(jié)點是連續(xù)變量時,該樹為回歸樹;當(dāng)終結(jié)點是分類變量,該樹為分類樹。
本文主要介紹一下ID3算法。
ID3算法的簡介以及原理:
ID3算法給予信息熵來選擇最佳測試屬性。它選擇當(dāng)前樣本集中具有最大信息增益值的屬性作為測試屬性;樣本集的劃分則依據(jù)測試屬性的取值進(jìn)行,測試屬性有多少不同取值就將樣本集劃分為多少子樣本集,同時決策樹上相應(yīng)于該樣本集的節(jié)點長出新的葉子節(jié)點。
根據(jù)信息論理論,采用劃分樣本集的不確定性作為衡量劃分好壞的標(biāo)準(zhǔn),用信息增益值度量不確定性:信息增益值越大,不確定性越小,因此,在每個非葉節(jié)點選擇信息增益最大的屬性作為測試屬性,這樣可以得到當(dāng)前情況下最純的拆分,從而得到較小的決策樹。
公式如圖
顯然E(A)越小,Gain(A)的值越大,說明測試屬性A對于分類提供的信息越大,選擇A之后對分類的不確定程度越小。
ID3的算法具體實現(xiàn)步驟如下:
1,對當(dāng)前樣本集合,計算所有屬性的信息增益
2,選擇信息增益最大的屬性作為測試屬性,把測試屬性取值相同的樣本劃分到同一個子樣本集;
3,若子樣本集的類別屬性只含有單個屬性,則分支為葉子結(jié)點,判斷其屬性值并標(biāo)上相應(yīng)的符號,然后返回調(diào)用出;否則對子樣本集遞歸調(diào)用本算法。
廢話不多說,直接貼代碼為證:
#-*- coding: utf-8 -*-
import pandasas pd
#參數(shù)初始化
inputfile ='path'
data = pd.read_excel(inputfile, index_col =u'序號')#導(dǎo)入數(shù)據(jù)
#數(shù)據(jù)如果是類別標(biāo)簽,需要轉(zhuǎn)化為數(shù)據(jù)
#用1和-1分別代表各自標(biāo)簽
data[data ==u'標(biāo)簽A'] =1
data[data ==u'標(biāo)簽B'] =1
data[data ==u'標(biāo)簽B'] =1
data[data !=1] = -1
x = data.iloc[:,:3].as_matrix().astype(int)
y = data.iloc[:,3].as_matrix().astype(int)
from sklearn.treeimport DecisionTreeClassifieras DTC
dtc = DTC(criterion='entropy')#建立決策樹模型,
dtc.fit(x, y)#訓(xùn)練模型
#導(dǎo)入相關(guān)函數(shù),可視化決策樹
from sklearn.treeimport export_graphviz
x = pd.DataFrame(x)
from sklearn.externals.siximport StringIO
x = pd.DataFrame(x)
with open("tree.dot", 'w')as f:
f = export_graphviz(dtc, feature_names = x.columns, out_file = f)
總結(jié)
以上是生活随笔為你收集整理的python决策树分类预测_数据分类预测之python决策树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中encode和encodi
- 下一篇: 比较器之几种电压比较器电路