實用 分享乙個決策樹視覺化工具

2022-06-14 22:06:13 字數 3120 閱讀 2368

作者 | revolver

一、具體**和步驟

視覺化我們的決策樹模型的第一步是把模型訓練出來。下面這個例子是在鳶尾花資料上,採用隨機森林的方法訓練出來的包含多棵決策樹的模型,我們對其中一棵決策樹進行視覺化

from sklearn.datasetsimport load_iris 

iris = load_iris()

# 匯入隨機森林模型 (此處也可換成決策樹模型)

from sklearn.ensembleimport randomforestclassifier

model =randomforestclassifier(n_estimators=10)

# 訓練

model.fit(iris.data,iris.target)

# 提取單棵決策樹

tree =model.estimators_[5]

訓練好我們的模型之後,我們就可以用sklearn自帶的export_graphviz函式將決策樹模型轉換成graphviz格式

from sklearn.treeimport export_graphviz

# 輸出乙個.dot格式的檔案

export_graphviz(tree,out_file='tree.dot',

feature_names =iris.feature_names,

class_names =iris.target_names,

rounded = true, proportion =false,

precision = 2, filled = true)

引數含義:

precision設定輸出的純度指標的數值精度

filled指定是否為節點上色

max_depth指定展示出來的樹的深度,可以用來控制影象大小

。有兩種方式使用graphviz這個工具,一種是執行pip install graphviz,然後可以在pyhton呼叫,另一種是使用命令列,這裡我們採用第二種,但是是在python裡呼叫的外部命令行。

# 臨時將graphviz新增到環境變數中

import os

os.environ["path"]+= os.pathsep + 'c:/program files (x86)/graphviz2.38/bin/

# 將tree.dot檔案轉化為tree.png

from subprocess importcall

call(['dot', '-tpng','tree.dot', '-o', 'tree.png', '-gdpi=600'])

# 在jupyter notebook中檢視決策樹影象

上圖就是我們將決策樹視覺化之後的結果,根據每個節點中的文字內容,我們就可以知道,這個節點包含的資料純度大小(基尼指數或熵值)選用了哪個屬性以及屬性值對資料進行再劃分,樣本量多少,還可以根據節點顏色的深淺來推斷類別,不同顏色代表不同類別,顏色深度越淺說明各個類別的混雜程度高,顏色越深說明純度越高。上圖中綠、紫、土黃三個顏色就表示了鳶尾花的三種類別。

通過這樣的圖,我們可以直觀的展示隨機森林中的每棵樹,甚至推斷每棵樹形成背後的原因。

二、乙個例子

這裡我再舉乙個應用決策樹視覺化的例子。比如你想知道基於最小熵選擇劃分屬性生成決策樹這種方法不能產生一棵最小規模的決策樹,即基於最大資訊增益的原則去選擇最優劃分屬性。這裡我就用視覺化決策樹的方法來向大家說明這種方法是否可行。現在有下面這樣乙份資料:

其中a,b,c為三個屬性,class為類別,分x,y兩種。在第一次對資料集進行劃分時,根據

計算屬性的資訊增益,得

gain(d,c)=0.557,gain(d,a)= gain(d,b)= 0.2816

這裡若基於熵最小方法首先應選擇c作為劃分屬性,最後可得決策樹視覺化如下圖。

在這棵樹中,a,b,c三個屬性全部被用來進行劃分,產生了三個分支節點。但如果我們採用屬性a作為第乙個劃分屬性,會得到一棵這樣的決策樹:

由圖可知,其實僅僅用到a,b兩個屬性即可將資料集完全劃分為一顆葉子節點熵為0的完整決策樹,這棵樹只有兩個分支節點,三個葉子結點,其規模顯然小於上面的決策樹。這個例子說明了基於最小熵的方法生成的決策樹規模不一定就是最小的。它只能在區域性範圍內取得純度最高的類別劃分,是區域性最優,從整個生成整棵決策樹所有節點的過程來看,它並不能保證生成的節點數是最少的。

怎麼樣,上面這些例子中,決策樹視覺化是不是讓一切看起來簡單明瞭!

三、總結

現階段機器學習模型仍然存在著黑盒問題,一張並不能徹底解決此問題。儘管如此,觀察決策樹圖的過程還是向我們展示了這個模型並非乙個不可解釋的方法,而是一系列被提出的邏輯問題和答案,正如我們平時進行**時所採用的步驟那樣。所以,你可以直接複製上面的**,盡情把這個工具用到你自己的資料集上,解決你的問題吧。

決策樹視覺化

決策樹相比其他演算法的乙個重要特性就是 可解釋性,構建決策樹的過程就相當於形成 if then 規則集。如果我們能夠將生成的決策樹視覺化,那麼我們就可以對資料集與 值之間的關係有清晰的認識。首先,我們以 sklearn.datasets 包中的鳶尾花資料集為例。from sklearn.datase...

sklearn 決策樹視覺化

來自google developer 的machine learning recipes with josh gordon youtube鏈結 這裡使用了lris flower data set 生成了乙個認花的小樹 import numpy as np from sklearn.datasets ...

Scikit learn 決策樹視覺化

平常網上看到的關於決策樹的scikit learn教程大都是直接給出容器的訓練 clf tree.decisiontreeclassifier clf clf.fit x,y clf.predict 然而有時候要的不只是 資料的結果,選擇決策樹還想要看到訓練出來的決策樹是什麼樣的。於是經過各種搜尋,...