機器學習系列之決策樹

2021-08-21 06:10:23 字數 2455 閱讀 5510

最近想把每個機器學習的演算法,重新學習一遍。最好能自己編寫一遍,但是一方面程式設計能力欠缺,另一方面時間有限。所以大本分**都是跟著別人的技術部落格,照葫蘆畫瓢。

無論是程式設計能力,還是機器學習演算法,都有待進一步提公升。請注意下面的**不完整,完整**請參照下面分享的大牛的技術部落格。

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ = 'great'

"""輸入:資料集

輸出:決策樹(分類結果)

#偽**

def 建立決策樹:

if 資料集樣本分類一致:

建立帶類標籤的葉子節點

else:

尋找劃分資料集,資訊熵增益最大的特徵

據此劃分資料集

for 每個劃分後的資料集:

建立之樹(遞迴)

def 載入資料集

def 計算熵

def 資料集劃分

def 根據熵增益選擇最佳劃分

def 遞迴構建決策樹

def 樣本分類

def matplotlib 顯示

def 決策樹儲存

""""""計算資訊熵

h(x) = -∑[p(x)log2(p(x))]

熵是基於每種類別的概率計算

"""from math import log

def entropy_cal(data):

label = {}

for one in data:

label_data = one[-1]

if label_data not in label.keys():

label[label_data] =0

label[label_data] += 1

length = len(data)

h_entropy = 0

for item in label:

px = label[item]/length

h_entropy -= float(px)*log(px, 2)

return h_entropy

"""資料集"""

def get_data():

dataset = [[1, 1, 'yes'],

[1, 1, 'yes'],

[1, 0, 'no'],

[0, 1, 'no'],

[0, 1, 'no']]

return dataset

"""測試"""

data = get_data()

test = entropy_cal(data)

print(test)

#資料集的劃分

def splitdata(data, axis, value):

next_data =

for one in data:

if one[axis] == value:

data_next = data[:axis]

data_next.extend(data[axis+1:])

return next_data

#計算資訊熵增益

g = h(d) - h(di|xi)

h(di|xi) = -∑(di/d)*∑[p(x)log2(p(x))]

#最佳資料集劃分特徵

def bestfeature(data):

best_gain = 0

base_entropy = entropy_cal(data)

best_feat = -1

h_f_entropy = 0

length = len(data[0]) - 1

for i in range(length):

feat_list = [item[i] for item in data]

unique_feat = set(feat_list)

new_entropy = 0

for value in unique_feat:

sub_data = splitdata(data, i, value)

prob = len(sub_data)/float(len(data))

new_entropy += prob*entropy_cal(sub_data)

get_gain = base_entropy - new_entropy

if (get_gain > best_gain):

best_gain = get_gain

best_feat = i

return best_feat

'''測試2'''

#data = get_data()

feat = bestfeature(data)

#print(feat)

不完整**,未完成,待續。。。

參考:統計學習方法

機器學習之決策樹

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

機器學習之決策樹

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

機器學習之決策樹

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