機器學習 決策樹

2021-10-23 08:12:26 字數 3269 閱讀 1632

決策樹是一種機器學習的方法。決策樹的生成演算法有id3,c4.5和c5.0等。決策樹是一種樹形結構,其中每個內部節點表示乙個屬性上的判斷,每個分支代表乙個判斷結果的輸出,最後每個葉節點代表一種分類結果。

演算法演算法描述

id3其核心是在決策樹的各級節點上,使用資訊增益作為屬性的選擇標準,來幫助確定每個節點所應該採用的合適屬性。

c4.5

c4.5決策樹生產演算法相對於id3演算法的重要改進是使用資訊增益率來選擇節點屬性。c4.5演算法既能夠處理離散的描述屬性,也可以處理連續的描述屬性。

c5.0

是c4.5的修訂版,適用於處理大資料集,採用boosting方式提高模型準確率,根據能夠帶來的最大資訊增益的字段拆分樣本。

cart演算法

cart決策樹是一種十分有效的非引數分類和回歸方法,通過構建樹、修建樹、評估樹來構建乙個二叉樹。當終結點是連續變數時,該樹為回歸樹;當終結點是分類變數時,該樹為分類樹。

本文採用id3演算法劃分資料集。

1、資訊增益

h =−

∑i=1

np(x

i)lo

g2p(

xi

)h=-\sum_^p(xi)}^{}p(xi)

h=−i=1

∑n​p

(xi)

log2

​p(x

i)**實現:

from math import log  #計算資訊熵

defcalcshannonent

(dataset)

: numentries =

len(dataset)

labelcounts=

for featvec in dataset:

currentlabel = featvec[-1

]if currentlabel not

in labelcounts.keys(

):

labelcounts[currentlabel]

=0

labelcounts[currentlabel]

+=1

shannonent =

0.0for key in labelcounts:

prob =

float

(labelcounts[key]

)/numenrtries

shannonent -= prob*log(prob,2)

return shannonent

2、劃分資料集

#按照給定特徵劃分資料集

defsplitdataset

(dataset. axis, value)

:

retdataset =

for featvec in dataset:

if featvec[axis]

== value:

reducedfeatvec = featvec[

:axis]

reducedfearvec.extend(featvec[axis+1:

])return retdataset

#選擇最好的資料集劃分方式

defchoosebestfeaturetosplit

(dataset)

: numfeatures =

len(dataset[0]

)-1 baseentropy = calcshannonent(dataset)

bestinfogain =

0.0; bestfeature =-1

for i in

range

(numfeatures)

: featlist =

[example[i]

for example in dataset]

uniquevals =

set(fearlist)

newentropy =

0.0for value in uniquevals:

subdataset = splitdataset(dataset, i , value)

prob =

len(subdataset)

/float

(len

(dataset)

) newentropy += prob * calcshannonent(subdataset)

infogain = baseentropy - newentropy

if(infogain>bestinfogain)

: bestinfogain = infogain

bestfeature = i

return bestfeatuer

3、遞迴構建決策樹

#建立樹的函式**

defcreattree

(dataset,labels)

: classlist =

[example[-1

]for example in dataset]

if classlist.count(classlist[0]

)==len(classlist)

:return classlist[0]

iflen

(dataset[0]

)==1:

return majoritycnt(classlist)

bestfeat = choosebestfeaturetosplit(dataset)

bestfeatlabel = labels[bestfeat]

mttree =

}del

(labels[bestfeat]

) featvalues =

[example[bestfeat]

for example in dataset]

uniquevals =

set(featvalues)

for value in uniquevals:

sublabels = labels[:]

mytree[bestfeatlabel]

[value]

= creattree(splitdataset\(dataset, bestfeat, value)

,sublabels)

return mytree

機器學習 決策樹

一 基本概念 決策樹 decision tree 是一種基本的分類與回歸方法。決策樹模型呈樹形結構,在分類問題中,表示屬於特徵對例項進行分類的過程,它可以認為是if then規則的集合,也可以認為是電議在特徵空間與類空空上的條件概率分布,其主要優點是模型具有可讀性,分類速度快。決策樹的學習通常包括3...

機器學習 決策樹

我覺得決策樹是機器學習所有演算法中最可愛的了 沒有那麼多複雜的數學公式哈哈 下圖是一棵決策樹,用來判斷西瓜是好瓜還是壞瓜 決策過程中提出的每個判定問題都是都對某個屬性的測試,每個測試結果要麼推導出最終結論,要麼匯出進一步判斷的問題,在上次決策結果限定的範圍內做進一步判斷。從上圖可以看出,葉節點對應決...

機器學習 決策樹

一 演算法簡介 決策樹一般都是自上而下來生成的,每個決策後事件 即自然狀態 都可能引出兩個或多個事件,導致結果的不同,把這種結構分支畫成形狀很像一棵樹的枝幹,故稱為決策樹。決策樹能夠讀取資料集合,並且決策樹很多任務都是為了資料中所蘊含的知識資訊,因此決策樹可以使用不熟悉的資料集合,並從中提取一系列規...