決策樹是一種機器學習的方法。決策樹的生成演算法有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
∑np
(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...
機器學習 決策樹
我覺得決策樹是機器學習所有演算法中最可愛的了 沒有那麼多複雜的數學公式哈哈 下圖是一棵決策樹,用來判斷西瓜是好瓜還是壞瓜 決策過程中提出的每個判定問題都是都對某個屬性的測試,每個測試結果要麼推導出最終結論,要麼匯出進一步判斷的問題,在上次決策結果限定的範圍內做進一步判斷。從上圖可以看出,葉節點對應決...
機器學習 決策樹
一 演算法簡介 決策樹一般都是自上而下來生成的,每個決策後事件 即自然狀態 都可能引出兩個或多個事件,導致結果的不同,把這種結構分支畫成形狀很像一棵樹的枝幹,故稱為決策樹。決策樹能夠讀取資料集合,並且決策樹很多任務都是為了資料中所蘊含的知識資訊,因此決策樹可以使用不熟悉的資料集合,並從中提取一系列規...