1飞蛹、模型原理
(一)原理
1卧檐、原理:引入信息熵(不確定程度)的概念焰宣,通過(guò)計(jì)算各屬性下的信息增益程度(信息增益越大匕积,則意味著使用該屬性來(lái)進(jìn)行劃分所獲得的“純度提升”越大),增益程度最大的盅粪,則將其選擇為一個(gè)結(jié)點(diǎn)悄蕾,然后再進(jìn)行下一步信息增益計(jì)算,選擇下一個(gè)屬性結(jié)點(diǎn)豆同,直至無(wú)法劃分為止含鳞,則最后的結(jié)點(diǎn)成為葉結(jié)點(diǎn)民晒。
2、三種屬性劃分準(zhǔn)則:
(1)以“信息增益”為準(zhǔn)則靴姿,代表算法為ID3磁滚,但信息增益準(zhǔn)則對(duì)可取值數(shù)目較多的屬性有所偏好垂攘,為減少這種偏好可能帶來(lái)的不利影響,改進(jìn)為使用“增益率”吱型。
(2)以“增益率”為準(zhǔn)則津滞,代表算法為C4.5灼伤,但信息率準(zhǔn)則對(duì)可能取值數(shù)據(jù)較少的屬性有所偏好狐赡,因此,C4.5算法并不是直接選擇增益率最大的候選劃分屬性鸟雏,而是使用了一張啟發(fā)式:先從候選劃分屬性中找出信息增益高于平均水平的屬性崔慧,再?gòu)闹羞x擇增益率最高的穴墅。
(3)以“基尼指數(shù)”為準(zhǔn)則,代表算法為CART(classification and regression tree,分類與回歸樹)皇钞。全是二叉樹夹界。
(4)各劃分準(zhǔn)則隘世,對(duì)決策樹的尺寸有較大影響丙者,但對(duì)泛化能力影響有限,有研究對(duì)信息增益和基尼指數(shù)進(jìn)行了對(duì)比分析目锭,發(fā)現(xiàn)僅在2%的情況下會(huì)有所不同痢虹。
(5)但剪枝方法和程度對(duì)決策樹泛化性能的影響相當(dāng)顯著主儡。
(6)“增量學(xué)習(xí)”糜值,即在接收到新樣本后可對(duì)己學(xué)得的模型進(jìn)行調(diào)整,而不用完全重新學(xué)習(xí).主要機(jī)制是通過(guò)調(diào)整分支路徑上的劃分屬性次序來(lái)對(duì)樹進(jìn)行部分重構(gòu)瓢阴,代表性算法有ID4荣恐、ID5R累贤、ITI等臼膏。增量學(xué)習(xí)可有效地降低每次接收到新樣本后的訓(xùn)練時(shí)間開銷,但多步增量學(xué)習(xí)后的模型會(huì)與基于全部數(shù)據(jù)訓(xùn)練而得的模型有較大差別嚷硫。
3、連續(xù)值和缺失值處理
(1)連續(xù)值處理脆贵,常使用二分法卖氨,對(duì)連續(xù)屬性a中的兩個(gè)屬性樣本數(shù)據(jù)ai和ai+1负懦,取其中位點(diǎn)(平均數(shù))作為劃分點(diǎn)纸厉,因此對(duì)連續(xù)屬性a,它如果有n個(gè)取值村斟,那它就有n-1個(gè)候選劃分點(diǎn)集合蟆盹,需要對(duì)這些候選劃分點(diǎn)分別計(jì)算信息增益闺金,找到最佳劃分點(diǎn)败匹。
還有一點(diǎn)需要注意,連續(xù)屬性與離散屬性一個(gè)不同點(diǎn)是舔哪,若當(dāng)前節(jié)點(diǎn)劃分屬性為連續(xù)屬性捉蚤,該屬性還可以作為其后代結(jié)點(diǎn)的劃分屬性炼七,例如在父結(jié)點(diǎn)上使用了“密度≤0.381”豌拙,不會(huì)禁止在子節(jié)點(diǎn)上使用“密度≤0.294”按傅。(主要是連續(xù)屬性還可以再細(xì)分胧卤,但離散屬性灌侣,比如“顏色=青綠”裂问,已經(jīng)不能再細(xì)分為“很青綠”堪簿、“一般青綠”之類的皮壁,不然就直接作為一個(gè)屬性存在了蛾魄。)
(2)缺失值處理方面
在根節(jié)點(diǎn)選擇劃分屬性時(shí)滴须,計(jì)算信息增益時(shí),對(duì)某屬性的缺失值直接忽略進(jìn)行計(jì)算痛侍,如“紋理”屬性主届,總共16個(gè)樣本待德,只有14個(gè)樣本在“紋理”屬性上有數(shù)據(jù)将宪,那就只對(duì)這14個(gè)樣本算“增益”,然后再乘以14/16的權(quán)重簸喂。
再進(jìn)行子節(jié)點(diǎn)的屬性劃分時(shí)喻鳄,就通過(guò)設(shè)置權(quán)重确封,將缺失樣本分別進(jìn)入各屬性分類中。如“紋理”中的2個(gè)缺失值纠拔,按照“8/14個(gè)清晰”泛豪,“4/14個(gè)稍糊”诡曙,“2/14個(gè)模糊”分別參加計(jì)算价卤,決定這一層哪個(gè)屬性信息增益最大。
突然想到一個(gè)問(wèn)題床嫌,那連續(xù)屬性的缺失值如何處理厌处。
4盖文、剪枝
兩大類思路:
一種是西瓜書上的五续,首先需要?jiǎng)澐钟?xùn)練集和驗(yàn)證集疙驾,分為預(yù)剪枝和后剪枝:
預(yù)剪枝,先用訓(xùn)練集計(jì)算一個(gè)劃分屬性函荣,然后用驗(yàn)證集計(jì)算劃分前和劃分后的精度變化傻挂,如果劃分后精度變低挖息,則剪枝套腹。
后剪枝,先用訓(xùn)練集訓(xùn)練整個(gè)決策樹幢码,然后從下往上症副,用驗(yàn)證集逐個(gè)計(jì)算結(jié)點(diǎn)的精確度變化贞铣,決定剪枝與否。
兩者優(yōu)缺點(diǎn):預(yù)剪枝,使得很多分支都沒有展開圣勒,不僅降低了過(guò)擬合(對(duì)訓(xùn)練數(shù)據(jù)分類很準(zhǔn)圣贸,但對(duì)未知的測(cè)試數(shù)據(jù)分類卻不那么準(zhǔn)確)的風(fēng)險(xiǎn)吁峻,還顯著減少了決策樹的訓(xùn)練時(shí)間開銷和測(cè)試時(shí)間開銷在张。但另一方面帮匾,有些分支的當(dāng)前劃分雖不能提升泛化性能瘟斜,甚至能導(dǎo)致泛化性能暫時(shí)下降,但在其基礎(chǔ)上進(jìn)行的后續(xù)劃分卻有可能導(dǎo)致性能顯著提高虽惭,預(yù)剪枝基于貪心本質(zhì)禁止這些分支展開芽唇,給預(yù)剪枝決策樹帶來(lái)了欠擬合的風(fēng)險(xiǎn)披摄。
后剪枝,通常比預(yù)剪枝決策樹保留了更多的分支义辕,一般情況下灌砖,后剪枝欠擬合的風(fēng)險(xiǎn)很小傀蚌,泛化性能往往優(yōu)于預(yù)剪枝善炫,但后剪枝在生產(chǎn)完全決策樹之后進(jìn)行的箩艺,并且要自底向上的對(duì)樹中的所有非葉節(jié)點(diǎn)進(jìn)行逐一考察艺谆,因此其訓(xùn)練時(shí)間開銷要遠(yuǎn)遠(yuǎn)大于未剪枝和預(yù)剪枝決策樹静汤。
另一類是李航《統(tǒng)計(jì)學(xué)習(xí)方法》上的,通過(guò)“訓(xùn)練數(shù)據(jù)”來(lái)先訓(xùn)練出來(lái)整個(gè)決策樹藤抡,然后從葉結(jié)點(diǎn)往上一個(gè)個(gè)比較決策樹整體的損失函數(shù)(等于整體信息熵+α*葉結(jié)點(diǎn)個(gè)數(shù)杰捂,其中α自己設(shè)定)嫁佳,如果剪枝后損失函數(shù)變小谷暮,則剪枝湿弦,直至不能繼續(xù)剪枝為止。
5蝶俱、多變量決策樹
(1)決策樹所形成的分類邊界有一個(gè)明顯的特點(diǎn):軸平行榨呆,即它的分類邊界由若干個(gè)與坐標(biāo)軸平行的分段組成庸队。但在學(xué)習(xí)任務(wù)的真實(shí)分類邊界比較復(fù)雜時(shí)彻消,必須使用很多段劃分才能獲得較好的近似宾尚,此時(shí)的決策樹會(huì)相當(dāng)復(fù)雜煌贴,由于要進(jìn)行大量的屬性測(cè)試,預(yù)測(cè)時(shí)間開銷會(huì)很大.
(2)多變量決策樹
若能使用斜的劃分邊界缎谷,如下圖中紅色線段所示列林,則決策樹模型將大為簡(jiǎn)化"多變量決策樹" (multivariate decision tree) 就是能實(shí)現(xiàn)這樣的"斜劃分"甚至更復(fù)雜劃分的決策樹.以實(shí)現(xiàn)斜劃分的多變量決策樹為例,在此類決策樹中者甲,非葉結(jié)點(diǎn)不再是僅對(duì)某個(gè)屬性虏缸,而是對(duì)屬性的線性組合進(jìn)行測(cè)試刽辙。
6、CART算法
分為回歸樹和分類樹兩種,回歸樹用平方誤差最小化準(zhǔn)則慨灭,分類樹用基尼指數(shù)最小化準(zhǔn)則氧骤。
CART的剪枝方法语淘,是李航《統(tǒng)計(jì)學(xué)習(xí)方法》上的,通過(guò)“訓(xùn)練數(shù)據(jù)”來(lái)先訓(xùn)練出來(lái)整個(gè)決策樹姑蓝,然后從葉結(jié)點(diǎn)往上一個(gè)個(gè)比較決策樹整體的損失函數(shù)(等于整體信息熵+α*葉結(jié)點(diǎn)個(gè)數(shù)纺荧,其中α自己設(shè)定)宙暇,如果剪枝后損失函數(shù)變小占贫,則剪枝型奥,直至不能繼續(xù)剪枝為止厢汹。
在這里又進(jìn)行了推廣谐宙,α設(shè)置的大小不同烫葬,導(dǎo)致你剪枝的取舍不同(α越大,對(duì)葉結(jié)點(diǎn)個(gè)數(shù)越厭惡凡蜻,越偏向于取少的葉結(jié)點(diǎn)搭综。當(dāng)α足夠大時(shí),就只有根節(jié)點(diǎn)划栓,當(dāng)α足夠小時(shí)设凹,則保留未剪枝過(guò)的決策樹)。
通過(guò)算法闪朱,對(duì)應(yīng)每個(gè)子決策樹(即月匣,通過(guò)剪枝,擁有不同葉結(jié)點(diǎn)的決策樹)都有一個(gè)參數(shù)α奋姿,這時(shí)锄开,利用獨(dú)立的驗(yàn)證數(shù)據(jù)集,測(cè)試各個(gè)子決策樹的平方誤差和基尼指數(shù)称诗,找到其中最小的萍悴,就是最優(yōu)的決策樹,同時(shí)最優(yōu)的參數(shù)α也確定了寓免。
ID3癣诱、C4.5的缺點(diǎn):
(1)ID3算法雖然提出了新思路,但是還是有很多值得改進(jìn)的地方袜香∷河瑁
a)ID3沒有考慮連續(xù)特征,比如長(zhǎng)度蜈首,密度都是連續(xù)值实抡,無(wú)法在ID3運(yùn)用。這大大限制了ID3的用途欢策。
b)ID3采用信息增益大的特征優(yōu)先建立決策樹的節(jié)點(diǎn)吆寨。很快就被人發(fā)現(xiàn),在相同條件下踩寇,取值比較多的特征比取值少的特征信息增益大啄清。比如一個(gè)變量有2個(gè)值,各為1/2俺孙,另一個(gè)變量為3個(gè)值盒延,各為1/3,其實(shí)他們都是完全不確定的變量鼠冕,但是取3個(gè)值的比取2個(gè)值的信息增益大。
c)ID3算法對(duì)于缺失值的情況沒有做考慮
d) 沒有考慮過(guò)擬合的問(wèn)題
(2) C4.5雖然改進(jìn)或者改善了ID3算法的幾個(gè)主要的問(wèn)題胯盯,仍然有優(yōu)化的空間懈费。
a)由于決策樹算法非常容易過(guò)擬合,因此對(duì)于生成的決策樹必須要進(jìn)行剪枝博脑。剪枝的算法有非常多憎乙,C4.5的剪枝方法有優(yōu)化的空間。思路主要是兩種叉趣,一種是預(yù)剪枝泞边,即在生成決策樹的時(shí)候就決定是否剪枝。另一個(gè)是后剪枝疗杉,即先生成決策樹阵谚,再通過(guò)交叉驗(yàn)證來(lái)剪枝蚕礼。后面在下篇講CART樹的時(shí)候我們會(huì)專門講決策樹的減枝思路,主要采用的是后剪枝加上交叉驗(yàn)證選擇最合適的決策樹梢什。
b)C4.5生成的是多叉樹奠蹬,即一個(gè)父節(jié)點(diǎn)可以有多個(gè)節(jié)點(diǎn)。很多時(shí)候嗡午,在計(jì)算機(jī)中二叉樹模型會(huì)比多叉樹運(yùn)算效率高囤躁。如果采用二叉樹,可以提高效率荔睹。
c)C4.5只能用于分類狸演,如果能將決策樹用于回歸的話可以擴(kuò)大它的使用范圍。
d)C4.5由于使用了熵模型僻他,里面有大量的耗時(shí)的對(duì)數(shù)運(yùn)算,如果是連續(xù)值還有大量的排序運(yùn)算宵距。如果能夠加以模型簡(jiǎn)化可以減少運(yùn)算強(qiáng)度但又不犧牲太多準(zhǔn)確性的話,那就更好了中姜。
2消玄、對(duì)于不含沖突數(shù)據(jù)(即特征向量完全相同但標(biāo)記不同)的訓(xùn)練集,必存在與訓(xùn)練集一致(即訓(xùn)練誤差為0)的決策樹丢胚。只要規(guī)則劃分的夠細(xì)翩瓜,肯定能分出來(lái)。
2携龟、Python3中sklearn-tree的代碼實(shí)現(xiàn)
決策樹分類和決策樹回歸的參數(shù)設(shè)置
- sklearn.tree.DecisionTreeClassifier (criterion=’gini’*, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
- DecisionTreeRegressor(criterion=’mse’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=False)
criterion兔跌,表示劃分屬性時(shí)選用的準(zhǔn)則,可選峡蟋,默認(rèn)設(shè)置是“gini”或“mse”
— 在決策樹分類時(shí)坟桅,可選擇“gini”,表示采用基尼系數(shù)蕊蝗,即CART算法仅乓;選擇“entropy”,表示采用信息增益蓬戚。
— 在決策樹回歸時(shí)夸楣,可選擇“mse”,表示采用均方差子漩;選擇“mae”豫喧,表示采用與均值之差的絕對(duì)值的和。推薦使用默認(rèn)的"mse"幢泼。一般來(lái)說(shuō)"mse"比"mae"更加精確紧显。除非你想比較二個(gè)參數(shù)的效果的不同之處。
splitter缕棵,表示特征劃分點(diǎn)選擇策略孵班,可選涉兽,默認(rèn)設(shè)置是“best”
— 可以使用"best"或者"random"。前者在特征的所有劃分點(diǎn)中找出最優(yōu)的劃分點(diǎn)重父。后者是隨機(jī)的在部分劃分點(diǎn)中找局部最優(yōu)的劃分點(diǎn)花椭。默認(rèn)的"best"適合樣本量不大的時(shí)候,而如果樣本數(shù)據(jù)量非常大房午,此時(shí)決策樹構(gòu)建推薦"random" 矿辽。
max_depth,表示決策樹的最大深度郭厌,可選袋倔,默認(rèn)設(shè)置為None
— 可以選擇是int值或None,None時(shí)表示不限制決策樹的深度折柠,一般來(lái)說(shuō)宾娜,數(shù)據(jù)少或者特征少的時(shí)候可以不管這個(gè)值。如果模型樣本量多扇售,特征也多的情況下前塔,推薦限制這個(gè)最大深度,即輸入一個(gè)int值承冰,具體的取值取決于數(shù)據(jù)的分布华弓。常用的可以取值10-100之間。
min_samples_split困乒,表示結(jié)點(diǎn)再劃分所需最小樣本數(shù)寂屏,可選,默認(rèn)設(shè)置為2
— 可以選擇int或者float娜搂,這個(gè)值限制了結(jié)點(diǎn)繼續(xù)劃分的條件迁霎,如果某結(jié)點(diǎn)的樣本數(shù)少于min_samples_split,則不會(huì)繼續(xù)再嘗試選擇最優(yōu)特征來(lái)進(jìn)行劃分百宇。 默認(rèn)是2考廉;如果樣本量不大,不需要管這個(gè)值携御;如果樣本量數(shù)量級(jí)非常大昌粤,則推薦增大這個(gè)值。我之前的一個(gè)項(xiàng)目例子因痛,有大概10萬(wàn)樣本,建立決策樹時(shí)岸更,我選擇了min_samples_split=10鸵膏。可以作為參考怎炊。
min_samples_leaf谭企,表示葉結(jié)點(diǎn)所需的最少樣本數(shù)廓译,可選,默認(rèn)值為1
— 這個(gè)值限制了葉結(jié)點(diǎn)最少樣本數(shù)债查,如果某葉子節(jié)點(diǎn)數(shù)目小于樣本數(shù)非区,則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝。 默認(rèn)是1,可以輸入最少的樣本數(shù)的整數(shù)盹廷,或者最少樣本數(shù)占樣本總數(shù)的百分比征绸。如果樣本量不大,不需要管這個(gè)值俄占。如果樣本量數(shù)量級(jí)非常大管怠,則推薦增大這個(gè)值。之前的10萬(wàn)樣本項(xiàng)目使用min_samples_leaf的值為5缸榄,僅供參考渤弛。
min_weight_fraction_leaf,表示葉結(jié)點(diǎn)中所需的樣本的權(quán)重和的最小值,默認(rèn)為0.
— 可為float型甚带,這個(gè)值限制了葉結(jié)點(diǎn)所有樣本權(quán)重和的最小值她肯,如果小于這個(gè)值,則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝鹰贵。 默認(rèn)是0晴氨,就是不考慮權(quán)重問(wèn)題。一般來(lái)說(shuō)砾莱,如果我們有較多樣本有缺失值瑞筐,或者分類樹樣本的分布類別偏差很大,就會(huì)引入樣本權(quán)重腊瑟,這時(shí)我們就要注意這個(gè)值了聚假。
max_features,表示在進(jìn)行劃分時(shí),可以考慮的最大的特征數(shù)闰非,可選膘格,默認(rèn)為None
— 可以選擇int、float财松、auto瘪贱、sqrt、log2辆毡、None菜秦。默認(rèn)是"None",意味著劃分時(shí)考慮所有的特征數(shù);如果是"log2"意味著劃分時(shí)最多考慮log2N個(gè)特征舶掖;如果是"sqrt"或者"auto"意味著劃分時(shí)最多考慮N的二次方根個(gè)特征球昨。如果是整數(shù),代表考慮的特征絕對(duì)數(shù)眨攘。如果是浮點(diǎn)數(shù)主慰,代表考慮特征百分比嚣州,即考慮(百分比xN)取整后的特征數(shù)。其中N為樣本總特征數(shù)共螺。
一般來(lái)說(shuō)该肴,如果樣本特征數(shù)不多,比如小于50藐不,我們用默認(rèn)的"None"就可以了匀哄,如果特征數(shù)非常多,我們可以靈活使用剛才描述的其他取值來(lái)控制劃分時(shí)考慮的最大特征數(shù)佳吞,以控制決策樹的生成時(shí)間拱雏。
random_state,表示隨機(jī)數(shù)的生成方法底扳,可選铸抑,默認(rèn)為None。
— 可選int, RandomState instance或者None衷模。如果是int鹊汛,random_state是隨機(jī)數(shù)發(fā)生器使用的種子; 如果RandomState實(shí)例,random_state是隨機(jī)數(shù)生成器; 如果為None阱冶,則隨機(jī)數(shù)生成器是np.random使用的RandomState實(shí)例刁憋。
max_leaf_nodes,表示最大葉結(jié)點(diǎn)數(shù)木蹬,可選至耻,默認(rèn)為None。
— 通過(guò)限制最大葉子節(jié)點(diǎn)數(shù)镊叁,可以防止過(guò)擬合尘颓,默認(rèn)是"None”,即不限制最大的葉子節(jié)點(diǎn)數(shù)晦譬。如果加了限制疤苹,算法會(huì)建立在最大葉子節(jié)點(diǎn)數(shù)內(nèi)最優(yōu)的決策樹。如果特征不多敛腌,可以不考慮這個(gè)值卧土,但是如果特征分成多的話,可以加以限制像樊,具體的值可以通過(guò)交叉驗(yàn)證得到尤莺。
min_impurity_decrease,表示結(jié)點(diǎn)減少的最小不純度生棍,也是一種閥值颤霎,可選,默認(rèn)為0.0。
— 可選float捷绑。意思,如果加權(quán)的不純度減少量(基尼系數(shù)氢妈,信息增益粹污,均方差,絕對(duì)差)超過(guò)閥值首量,則該結(jié)點(diǎn)將會(huì)被繼續(xù)分割 壮吩。
min_impurity_split,表示結(jié)點(diǎn)劃分的最小不純度加缘,也是一種閥值鸭叙,默認(rèn)為None。
— 可選float拣宏。這個(gè)值限制了決策樹的增長(zhǎng)沈贝,如果某節(jié)點(diǎn)的不純度(基尼系數(shù),信息增益勋乾,均方差宋下,絕對(duì)差)小于這個(gè)閾值,則該節(jié)點(diǎn)不再生成子節(jié)點(diǎn)辑莫。即為葉結(jié)點(diǎn) 学歧。
class_weight,表示結(jié)點(diǎn)劃分的最小不純度各吨,也是一種閥值枝笨,默認(rèn)為None。
— 可選dict, list of dicts, “balanced” or None揭蜒;指定樣本各類別的的權(quán)重横浑,主要是為了防止訓(xùn)練集某些類別的樣本過(guò)多,導(dǎo)致訓(xùn)練的決策樹過(guò)于偏向這些類別忌锯。這里可以自己指定各個(gè)樣本的權(quán)重限书,或者用“balanced”便锨,如果使用“balanced”,則算法會(huì)自己計(jì)算權(quán)重,樣本量少的類別所對(duì)應(yīng)的樣本權(quán)重會(huì)高咏闪。當(dāng)然,如果你的樣本類別分布沒有明顯的偏倚辩涝,則可以不管這個(gè)參數(shù)霍狰,選擇默認(rèn)的"None"。
— 不適用于決策樹回歸砚哗。
presort龙助,表示結(jié)點(diǎn)劃分的最小不純度,也是一種閥值,默認(rèn)為False提鸟。
— 可選Ture或False军援,一般來(lái)說(shuō),如果樣本量少或者限制了一個(gè)深度很小的決策樹称勋,設(shè)置為true可以讓劃分點(diǎn)選擇更加快胸哥,決策樹建立的更加快。如果樣本量太大的話赡鲜,反而沒有什么好處空厌。問(wèn)題是樣本量少的時(shí)候,我速度本來(lái)就不慢银酬。所以這個(gè)值一般懶得理它就可以了嘲更。
參考sklearn官方文檔說(shuō)明,決策樹分類 sklearn.tree.DecisionTreeClassifier
和決策樹回歸 sklearn.tree.DecisionTreeRegressor
一個(gè)簡(jiǎn)單例子
import numpy as np
from sklearn.datasets import load_iris #用sklearn中自帶的iris數(shù)據(jù)
iris = load_iris()
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(iris.data,iris.target)
x_new=[5,3,1,0.1] #自己隨便寫的一個(gè)樣本數(shù)據(jù)
x_new = np.array(x_new).reshape(1, -1)
clf.predict (x_new)
決策樹可視化展示
1揩瞪、決策樹可視化環(huán)境搭建
scikit-learn中決策樹的可視化一般需要安裝graphviz赋朦。主要包括graphviz的安裝和python的graphviz插件的安裝。
第一步是安裝graphviz李破。下載地址在:http://www.graphviz.org/北发。如果你是linux,可以用apt-get或者yum的方法安裝喷屋。如果是windows琳拨,就在官網(wǎng)下載msi文件安裝。無(wú)論是linux還是windows屯曹,裝完后都要設(shè)置環(huán)境變量狱庇,將graphviz的bin目錄加到PATH,比如我是windows恶耽,將C:/Program Files (x86)/Graphviz2.38/bin/加入了PATH
(備注:環(huán)境設(shè)置步驟-電腦-屬性-高級(jí)系統(tǒng)設(shè)置-環(huán)境變量-系統(tǒng)變量-Path-將graphviz的bin目錄加到Path密任,記得加分號(hào);)
第二步是安裝python插件graphviz: pip install graphviz
第三步是安裝python插件pydotplus: pip install pydotplus
這樣環(huán)境就搭好了偷俭,有時(shí)候python會(huì)很笨浪讳,仍然找不到graphviz,這時(shí)涌萤,可以在代碼里面加入這一行:
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
注意后面的路徑是你自己的graphviz的bin目錄淹遵。
2、決策樹可視化的三種方法
首先載入類庫(kù):
from sklearn.datasets import load_iris
from sklearn import tree
import sys
import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/
#最后這行就是設(shè)置路徑
接著載入sciki-learn的自帶數(shù)據(jù)负溪,有決策樹擬合透揣,得到模型:
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
現(xiàn)在可以將模型存入dot文件iris.dot。
with open("iris.dot", 'w') as f:
f = tree.export_graphviz(clf, out_file=f)
這時(shí)候我們有3種可視化方法川抡,第一種是用graphviz的dot命令生成決策樹的可視化文件辐真,敲完這個(gè)命令后當(dāng)前目錄就可以看到?jīng)Q策樹的可視化文件iris.pdf.打開可以看到?jīng)Q策樹的模型圖。
#注意,這個(gè)命令在命令行執(zhí)行
dot -Tpdf iris.dot -o iris.pdf
第二種方法是用pydotplus生成iris.pdf侍咱。這樣就不用再命令行去專門生成pdf文件了耐床。
import pydotplus
dot_data = tree.export_graphviz(clf, out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("iris.pdf")
第三種辦法是個(gè)人比較推薦的做法,因?yàn)檫@樣可以直接把圖產(chǎn)生在ipython的notebook楔脯。代碼如下:
from IPython.display import Image
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 = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
在ipython的notebook生成的圖如下:
參考:這篇 scikit-learn決策樹算法類庫(kù)使用小結(jié)的第三部分就是可視化咙咽,還有[簡(jiǎn)單Python決策樹可視化實(shí)例]
它采用的方法是安裝第三方庫(kù)graphviz,并且安裝Python的graphviz插件淤年,聯(lián)合作用來(lái)實(shí)現(xiàn),需要實(shí)際操作試驗(yàn)一下效果蜡豹。
一篇單獨(dú)講graphviz的帖子麸粮,Graphviz繪圖的安裝與使用。
參考文獻(xiàn)
一個(gè)系列文章镜廉,寫的很好弄诲,重點(diǎn)參考
第一篇:決策樹算法原理(上),介紹了ID3和C4.5算法原理娇唯,及各自的優(yōu)缺點(diǎn)
第二篇: 決策樹算法原理(下)齐遵,介紹了CART算法,優(yōu)缺點(diǎn)和適用場(chǎng)景塔插。
第三篇: scikit-learn決策樹算法類庫(kù)使用小結(jié)梗摇,介紹了sklearn中決策樹的兩個(gè)算法,決策樹分類DecisionTreeClassifier和決策數(shù)回歸DecisionTreeRegressor想许,其中各個(gè)參數(shù)代表的意義和調(diào)參時(shí)候需要注意的事項(xiàng)伶授。