機器學習之決策樹

2021-08-28 11:57:17 字數 2881 閱讀 8385

簡介

決策樹是一種基本的分類方法,當然也可以用於回歸。我們一般只討論用於分類的決策樹。決策樹模型呈樹形結構。在分類問題中,表示基於特徵對例項進行分類的過程,它可以認為是if-then規則的集合。在決策樹的結構中,每乙個例項都被一條路徑或者一條規則所覆蓋。通常決策樹學習包括三個步驟:特徵選擇、決策樹的生成和決策樹的修剪。

特徵選擇

特徵選擇在於選取對訓練資料具有分類能力的特徵。這樣可以提高決策樹學習的效率,如果利用乙個特徵進行分類的結果與隨機分類的結果沒有很大差別,則稱這個特徵是沒有分類能力的。經驗上扔掉這樣的特徵對決策樹學習的京都影響不大。通常特徵選擇的準則是資訊增益,這是個數學概念。

(1)資訊熵

h = -(p1logp1 + p2logp2 + … + p32log32)

其中,p1…p32為這支球隊奪冠的概率。h的專業術語稱之為資訊熵,單位為位元,當這32支球隊奪冠的機率相同時,對應的資訊熵等於5位元,這個可以通過計算得出。有乙個特性就是,5位元是公式的最大值。那麼資訊熵(經驗熵)的具體定義可以為如下:

h (x

)=∑x

∈xp(

x)lo

gp(x

)h\left(x\right)\sum_}p\left(x\right)logp\left(x\right)

h(x)=x

∈x∑​

p(x)

logp

(x)

(2)資訊增益

自古以來,資訊和消除不確定性是相聯絡的。所以決策樹的過程其實是在尋找某乙個特徵對整個分類結果的不確定減少的過程。

那麼資訊增益表示得知特徵x的資訊而是的類y的資訊的不確定性減少的程度,所以我們對於選擇特徵進行分類的時候,當然選擇資訊增益較大的特徵,這樣具有較強的分類能力。特徵a對訓練資料集d的資訊增益g(d,a),定義為集合d的經驗熵h(d)與特徵a給定條件下d的經驗條件熵h(d|a)之差,即公式為:

g (d

,a)=

h(d)

−h(d

∣a

)g\left(\right)h\left(d\right) h\left(d|a\right)

g(d,a)

=h(d

)−h(

d∣a)

決策樹的生成

sklearn.tree.decisiontreeclassifier是乙個能對資料集進行多分類的類。

決策樹的修剪

(1)預剪枝

(2)後剪枝

簡介在機器學習中,隨機森林是乙個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定。

隨機森林的生成

sklearn.ensemble提供了準確性更加好的整合方法,裡面包含了主要的randomforestclassifier(隨機森林)方法。

import pandas as pd  #匯入pandas包

from sklearn.model_selection import train_test_split #資料切分

from sklearn.feature_extraction import dictvectorizer #特徵提取

from sklearn.tree import decisiontreeclassifier #匯入決策樹模型

from sklearn.ensemble import randomforestclassifier #匯入隨機森林模型

def decomation():

"""通過決策樹和隨機森林對鐵達尼號遇難資料進行**

:return: none

"""# 讀取資料

data = pd.read_csv("")

#特徵資料

x = data[["pclass","age","***"]] #其他的無用,或者不是特徵資料

# 目標資料

y = data[['survived']]

# 缺失值的處理,對於age的特徵中nan使用平均年齡填充

x['age'].fillna(x['age'].mean(), inplace=true) #inplace表示進行複製,而不是檢視

# 對資料集進行切分

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

# 特徵提取 通過dictvectorizer,將csv資料轉換成為字典資料

x_train = x_train.to_dict(orient='records')

x_test = x_test.to_dict(orient='records')

# 提取字典中的特徵資料

dict_vec = dictvectorizer(sparse=false)

x_train = dict_vec.fit_transform(x_train)

x_test = dict_vec.transform(x_test)

# 選擇決策樹模型

dec = decisiontreeclassifier() #max_path可以指定樹的深度,樹的深度越淺 泛化程度越高

# 輸入資料

dec.fit(x_train, y_train)

score = dec.score(x_test, y_test)

print(score)

# 選擇隨機森林模型

rand = randomforestclassifier(max_depth=5)

rand.fit(x_train, y_train)

score = rand.score(x_test, y_test)

print(score)

if __name__ == '__main__':

decomation()

機器學習之決策樹

在這裡,我想以更直觀的方式幫助各位理解 掌握並且運用 注意 是運用 決策樹,從而為機器學習作鋪墊。ps 但還是希望大家稍微知道決策樹大概是什麼樣子。1.根結點 root node 沒有入邊,但有零條或多條出邊 2.內部結點 internal node 恰有一條入邊和 兩條或多條出邊 3.葉結點 le...

機器學習之決策樹

決策樹是很常見的機器學習分類演算法,竟然叫決策樹,那麼它的模型其實就像樹一樣。通過對樣本集的學習,挖掘出有用的規則。對於程式設計師來說或許以條件語句來看就更好理解了,決策樹可以看成是多個if then條件語句的集合。這種模型等同於我們寫的條件語句,所以它的 分類速度是很快的。來個例子了解下決策樹分類...

機器學習之決策樹

1.利用資訊增益來進行決策樹的屬性劃分時選擇屬性的資訊增益較大的。資訊增益準則對可取值數目較多的屬性有多偏好 id3 增益率準則對可取值數目較少的屬性有多偏好 c4.5 因此,c4.5演算法並不是直接選擇增益率較大的時候選劃分屬性,而是使用了乙個啟發式 先從候選屬性中找出資訊增益高於平均水平的屬性,...