Python數據挖掘實踐—決策樹

這幾期和大家聊聊使用Python進行機器學習

題外話:之前一期 scrapy抓取噹噹網82萬冊圖書數據 的 Github 鏈接

Python擁有強大的第三方庫,使用Python進行科學計算和機器學習同樣需要先配置運行環境。這裡我們需要安裝Anaconda,官方給出的下載鏈接太慢,而且經常下載到一半卡死,這裡我提供我下載好的網盤鏈接,密碼:p2dt。需要的可以直接快速下載(Python3.5版)。Anaconda自帶以下庫Numpy、Scipy、Matplotlib、Pandas、和Scikit-Learn。

Numpy:提供數組支持,以及相應的高效處理函數;

Scipy:提供矩陣支持,以及矩陣相關的數值計算模塊;

Matplotlib:數據可視化工具,作圖庫;

Pandas:強大、靈活的數據分析和探索工具;

Scikit - Learn:支持回歸、分類、聚類等強大的機器學習庫;

決策樹是一個類似流程圖的樹狀結構,其中每個內部節點都表示在一個屬性上的測試,每個分支代表一個屬性輸出,而每個樹葉節點代表類或類分布,最頂層是根節點。

決策樹方法在分類、預測等領域有廣泛應用。我在百度上找了張圖,決策樹是長這樣:

下面我用一個案例來簡單介紹下用Python實現決策樹的機器學習過程

1、案例背景:某連鎖餐飲企業手頭擁有一批數據,想了解周末和非周末對銷量是否有很大區別,以及天氣的好壞、是否有促銷活動對銷量的影響。以單個門店為例,數據結構如下:

2、過程分析:這裡我們採用的演算法為ID3演算法,ID3演算法是啥,那麼多博客說的比我清楚,大家可以搜搜決策樹ID3就明白了。總結一句話:ID3就是基於信息熵來選擇最佳測試屬性,採用信息增益作為選擇測試屬性的標準。ID3生成的決策樹模型:

3、使用Scikit - Learn建立決策樹模型

數據鏈接,密碼:n7u5

#-*- coding: utf-8 -*-import pandas as pd#參數初始化inputfile = "../FEB/data.xls" #這裡輸入你個人的文件路徑data = pd.read_excel(inputfile, index_col = u"序號") #導入數據#數據是類別標籤,要將它轉換為數據#用1來表示「好」、「是」、「高」這三個屬性,用-1來表示「壞」、「否」、「低」data[data == u"好"] = 1data[data == u"是"] = 1data[data == u"高"] = 1data[data != 1] = -1x = data.iloc[:,:3].as_matrix().astype(int)y = data.iloc[:,3].as_matrix().astype(int)from sklearn.tree import DecisionTreeClassifier as DTCdtc = DTC(criterion="entropy") #建立決策樹模型,基於信息熵dtc.fit(x, y) #訓練模型#導入相關函數,可視化決策樹。from sklearn.tree import export_graphvizx = pd.DataFrame(x)with open("tree.dot", "w") as f: f = export_graphviz(dtc, feature_names = x.columns, out_file = f)

這裡我們在該python文件的同級目錄下導出的結果是一個dot文件(長得和word類似),需要安裝Graphviz才能將其轉換為pdf格式

導出的dot文件:

運行命令:dot -Tpdf tree.dot -o tree.pdf將該dot文件轉化成結構化圖

總結:決策樹的優點:直觀、便於理解、小規模數據集有效;決策樹的缺點:類別較多時,錯誤增加較快,可規模性不強。


推薦閱讀:

10分鐘python圖表繪製 | seaborn入門(四):回歸模型lmplot
[6] Python列表
Python機器學習實踐—決策樹
25 歲才開始學習編程靠譜嗎?40 歲都不晚!

TAG:Python | 机器学习 |