scikit-learn學習之決策樹演算法
======================================================================
本系列部落格主要參考 Scikit-Learn 官方網站上的每一個演算法進行,並進行部分翻譯,如有錯誤,請大家指正
======================================================================
1:理解和解釋起來簡單,且決策樹模型可以想象
2:需要準備的資料量不大,而其他的技術往往需要很大的資料集,需要建立虛擬變數,去除不完整的資料,但是該演算法對於丟失的資料不能進行準確的預測
3:決策樹演算法的時間複雜度(即預測資料)是用於訓練決策樹的資料點的對數
4:能夠處理數字和資料的類別(需要做相應的轉變),而其他演算法分析的資料集往往是隻有一種型別的變數
5:能夠處理多輸出的問題
6:使用白盒模型,如果給定的情況是在一個模型中觀察到的,該條件的解釋很容易解釋的布林邏輯,相比之下,在一個黑盒子模型(例如人工神經網路),結果可能更難以解釋
7:可能使用統計檢驗來驗證模型,這是為了驗證模型的可靠性
8:從資料結果來看,它執行的效果很好,雖然它的假設有點違反真實模型
決策樹演算法的缺點:
1:決策樹演算法學習者可以建立複雜的樹,但是沒有推廣依據,這就是所謂的過擬合,為了避免這種問題,出現了剪枝的概念,即設定一個葉子結點所需要的最小數目或者設定樹的最大深度
2:決策樹的結果可能是不穩定的,因為在資料中一個很小的變化可能導致生成一個完全不同的樹,這個問題可以通過使用整合決策樹來解決
3:眾所周知,學習一惡搞最優決策樹的問題是NP——得到幾方面完全的優越性,甚至是一些簡單的概念。因此,實際決策樹學習演算法是基於啟發式演算法,如貪婪演算法,尋求在每個節點上的區域性最優決策。這樣的演算法不能保證返回全域性最優決策樹。這可以減輕訓練多棵樹的合奏學習者,在那裡的功能和樣本隨機抽樣更換。
4:這裡有一些概念是很難的理解的,因為決策樹本身並不難很輕易的表達它們,比如說異或校驗或複用的問題。
5:決策樹學習者很可能在某些類占主導地位時建立有有偏異的樹,因此建議用平衡的資料訓練決策樹
使用命令匯出圖形為pdf:dot -T pdf ex.txt -o output.pdf.txt (windows cmd的命令)
本系列部落格主要參考 Scikit-Learn 官方網站上的每一個演算法進行,並進行部分翻譯,如有錯誤,請大家指正
======================================================================
決策樹的演算法分析與Python程式碼實現請參考之前的一篇部落格:點選閱讀 接下來我主要演示怎麼使用Scikit-Learn完成決策樹演算法的呼叫
iris資料集說明:
1:理解和解釋起來簡單,且決策樹模型可以想象
2:需要準備的資料量不大,而其他的技術往往需要很大的資料集,需要建立虛擬變數,去除不完整的資料,但是該演算法對於丟失的資料不能進行準確的預測
3:決策樹演算法的時間複雜度(即預測資料)是用於訓練決策樹的資料點的對數
4:能夠處理數字和資料的類別(需要做相應的轉變),而其他演算法分析的資料集往往是隻有一種型別的變數
5:能夠處理多輸出的問題
6:使用白盒模型,如果給定的情況是在一個模型中觀察到的,該條件的解釋很容易解釋的布林邏輯,相比之下,在一個黑盒子模型(例如人工神經網路),結果可能更難以解釋
7:可能使用統計檢驗來驗證模型,這是為了驗證模型的可靠性
8:從資料結果來看,它執行的效果很好,雖然它的假設有點違反真實模型
決策樹演算法的缺點:
1:決策樹演算法學習者可以建立複雜的樹,但是沒有推廣依據,這就是所謂的過擬合,為了避免這種問題,出現了剪枝的概念,即設定一個葉子結點所需要的最小數目或者設定樹的最大深度
2:決策樹的結果可能是不穩定的,因為在資料中一個很小的變化可能導致生成一個完全不同的樹,這個問題可以通過使用整合決策樹來解決
3:眾所周知,學習一惡搞最優決策樹的問題是NP——得到幾方面完全的優越性,甚至是一些簡單的概念。因此,實際決策樹學習演算法是基於啟發式演算法,如貪婪演算法,尋求在每個節點上的區域性最優決策。這樣的演算法不能保證返回全域性最優決策樹。這可以減輕訓練多棵樹的合奏學習者,在那裡的功能和樣本隨機抽樣更換。
4:這裡有一些概念是很難的理解的,因為決策樹本身並不難很輕易的表達它們,比如說異或校驗或複用的問題。
5:決策樹學習者很可能在某些類占主導地位時建立有有偏異的樹,因此建議用平衡的資料訓練決策樹
Classification 簡單示例
>>> from sklearn import tree
>>> X = [[0, 0], [1, 1]]
>>> Y = [0, 1]
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)
>>> clf.predict([[2., 2.]])
array([1])
Regression 簡單示例
>>> from sklearn import tree
>>> X = [[0, 0], [2, 2]]
>>> y = [0.5, 2.5]
>>> clf = tree.DecisionTreeRegressor()
>>> clf = clf.fit(X, y)
>>> clf.predict([[1, 1]])
array([ 0.5])
決策樹演算法使用 示例
資料集如下圖:
程式如下:
<span style="font-size:18px;">#-*- coding: UTF-8 -*-
'''
Created on 2016/4/23
@author: Administrator
'''
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO
#Read in the csv File and put feature in a list of class label
allElectronicsData = open(r"example.csv","rb")
reader = csv.reader(allElectronicsData)
headers = reader.next()
#print headers
featureList = []
labelList = []
#存放在兩個元祖中
for row in reader:
labelList.append(row[len(row)-1])
rowDic = {}
for i in range(1,len(row)-1):
rowDic[headers[i]] = row[i]
featureList.append(rowDic)
# print featureList
# print labelList
# Vector Feature
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList) .toarray()
# print "dummyX:",dummyX
# print vec.get_feature_names()
# print "labelList:"+str(labelList)
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
#print "dummyY:" + str(dummyY)
#using desicionTree for classfication
clf = tree.DecisionTreeClassifier(criterion="entropy") #建立一個分類器,entropy決定了用ID3演算法
clf = clf.fit(dummyX, dummyY)
print "clf:"+str(clf)
#Visulize model
with open("allEallElectronicInfomationGainori.txt","w") as f:
f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file = f)
#預測
oneRowX = dummyX[0,:]
#print "oneRowX:" +str(oneRowX)
newRowX = oneRowX
newRowX[0] = 1
newRowX[2] = 0
print "newRowX:" +str(newRowX)
predictedY = clf.predict(newRowX)
print "predictedY:" + str(predictedY)</span>
使用命令匯出圖形為pdf:dot -T pdf ex.txt -o output.pdf.txt (windows cmd的命令)
相關文章
- scikit-learn決策樹演算法類庫使用小結演算法
- 機器學習之決策樹演算法機器學習演算法
- 決策樹之CART演算法演算法
- 決策樹學習總結
- 機器學習經典演算法之決策樹機器學習演算法
- 決策樹演算法演算法
- 深入淺出學習決策樹(二)
- 深入淺出學習決策樹(一)
- 統計學習方法(二)決策樹
- GBDT(MART)迭代決策樹學習
- weka J48決策樹學習
- 機器學習之決策樹機器學習
- 鵝廠優文 | 決策樹及ID3演算法學習演算法
- 【Python機器學習實戰】決策樹和整合學習(二)——決策樹的實現Python機器學習
- 決策樹演算法原理(上)演算法
- 決策樹演算法原理(下)演算法
- 使用 SVM 和決策樹進行整合學習
- 機器學習演算法系列(十七)-決策樹學習演算法(Decision Tree Learning Algorithm)機器學習演算法Go
- 決策樹演算法-實戰篇演算法
- 決策樹演算法-理論篇演算法
- 經典的決策樹演算法演算法
- Decision tree(決策樹)演算法初探演算法
- 決策樹模型(4)Cart演算法模型演算法
- 《統計學習方法》——從零實現決策樹
- 淺談樹模型與整合學習-從決策樹到GBDT模型
- 決策樹
- 機器學習從入門到放棄之決策樹演算法機器學習演算法
- python3.4之決策樹Python
- 演算法雜貨鋪:分類演算法之決策樹(Decision tree)演算法
- 分類演算法-決策樹 Decision Tree演算法
- 【Python機器學習實戰】決策樹和整合學習(一)Python機器學習
- 決策樹在機器學習的理論學習與實踐機器學習
- 【Python機器學習實戰】決策樹與整合學習(三)——整合學習(1)Python機器學習
- 決策樹模型(3)決策樹的生成與剪枝模型
- 機器學習:決策樹機器學習
- 決策樹示例
- 機器學習-決策樹機器學習
- 春節不斷電之機器學習 —— 決策樹機器學習