最近想把每個機器學習的演算法,重新學習一遍。最好能自己編寫一遍,但是一方面程式設計能力欠缺,另一方面時間有限。所以大本分**都是跟著別人的技術部落格,照葫蘆畫瓢。
無論是程式設計能力,還是機器學習演算法,都有待進一步提公升。請注意下面的**不完整,完整**請參照下面分享的大牛的技術部落格。
#!/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規則的集合。在決策樹的結構中,每乙個例項都被一條路徑或者一條規則所覆蓋。通常決策樹學習包括三個步驟 特徵選擇 決策樹的...