python 資料探勘(9) 決策樹

2021-08-22 15:00:13 字數 2049 閱讀 1763

決策樹用在分類的問題上,說白了就是根據屬性判斷某一類別的問題。決策樹的核心是什麼?打個比方,如果今天下雨,我就去超市,如果超市沒有關門,我就買蘋果。假設把結果分成兩類,買蘋果和不買蘋果。則分為下:

這就是決策樹,但是問題來了,這是我買蘋果的決策樹。但是如果不知道我的規則,只給一堆使用者資料,比如告訴你天氣和超市是否關門(忘記關門肯定買不了這個常識吧,也可以換成其他的因素)然後給出一大堆買蘋果和不買蘋果的結果。我們要怎麼得到上圖的這種決策樹?要知道,怎麼才能從資料中看出來天氣是根節點?

如果是更複雜的場景,給你一系列的變數屬性,每個屬性也可能不止兩個值。從一系列屬性中根據某種規則(比如最大資訊增益)找出最佳的屬性作為根節點,在從根節點往下找出其餘最佳的屬性作為它的根節點,依次迴圈,直到屬性不可再分。這樣就得到了乙個樹狀的判斷圖,這就是決策樹的核心。

最佳屬性的獲取規則如下:

(1)首先計算總的資訊熵值:根據資訊理論,資訊值為下:

(2)計算每個屬性的資訊熵:

假設屬性有 k 種取值,

(3)選擇最大資訊增益的屬性作為根節點

就這樣在選取根節點後,在迴圈往復的在根節點一下再繼續按此規則選擇下一根節點,直到決策樹成形。

以上展示了根據蘋果買賣資料,決策樹形成的過程,選取 天氣為根節點。

用銷量資料 sales_data.xls 生成決策樹**如下:

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

import pandas as pd

filename = 'wajue/sales_data.xls'

data = pd.read_excel(filename,index_col = u"序號")

# 資料是類別標籤,要轉化成資料

# 用 1 表示好,是,高 這三種屬性,用 -1 來表示 壞 否 低

data[data == u"好"] = 1

data[data == u"是"] = 1

data[data == u"高"] = 1

data[data != 1] = -1

# 屬性資料矩陣

x_copy = data.iloc[:,:3]

x = data.iloc[:,:3].as_matrix().astype(int)

# 銷量類別矩陣

y = data.iloc[:,3].as_matrix().astype(int)

# 引入決策樹分類器 dtc

from sklearn.tree import decisiontreeclassifier as dtc

# 基於資訊熵建立決策樹模型

dtc = dtc(criterion = 'entropy')

dtc.fit(x,y)

# 匯入相關函式,視覺化決策時

from sklearn.tree import export_graphviz

from sklearn.externals.six import stringio

with open("wajue/tree.dot","w") as f:

f = export_graphviz(dtc,feature_names = x_copy.columns,out_file = f)

tree.dot 如下

資料探勘 決策樹

分類是資料探勘的乙個非常重要的主題,現實中的很多問題都和分類密切相關。我們日常正是因為有了分類技巧,才能對不同的事物 場景採取不同的應對方式。資料分類可以看做是乙個兩步的過程。第一步是學習過程,我們根據所需要分析的問題和資料建立乙個分類器classifier。用我們選擇好的訓練元組對分類器進行訓練,...

資料探勘 決策樹

決策樹是以樹狀結構表示資料分類的結果 非葉子結點代表測試的條件。分支代表測試的結果 1.資訊熵 informationentropy 是度量樣本集合純度最常用的一種指標。2.基尼係數 gini 是度量樣本集合不確定性指標。基尼指數與熵可近似看做是統一概念,都是越大,確定性越差 基尼指數和資訊熵的影象...

資料探勘之決策樹

熟悉掌握決策樹的原理,熟練掌握決策樹的生成方法與過程 anaconda sklearn pydotplus 決策樹是乙個非引數的監督式學習方法,主要用於分類和回歸。演算法的目標是通過推斷資料特徵,學習決策規則從而建立乙個 目標變數的模型。from sklearn import tree x 0 0 ...