python?sklearn?畫出決策樹(shù)并保存為PDF的實(shí)現(xiàn)過(guò)程
利用sklearn畫出決策樹(shù)并保存為PDF
下載Graphviz
進(jìn)入官網(wǎng)下載并安裝:
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
并將下列路徑配置為環(huán)境變量:
- D:\software\Graphviz\bin
在cmd中測(cè)試:
dot -version

python代碼
import numpy as np import pandas as pd from sklearn import tree import graphviz # x,y是sklearn中需要擬合的數(shù)據(jù) x = np.array(exam_train) y = np.array(classes_train) clf = tree.DecisionTreeClassifier(criterion='entropy', class_weight='balanced', max_depth=25) clf = clf.fit(x, y) dot_data = tree.export_graphviz(clf, out_file=None, feature_names=None, filled=True, rounded=True) # 重要參數(shù)可定制 graph = graphviz.Source(dot_data) graph.render(view=True, format="pdf", filename="decisiontree_pdf")
可以生成一張賊帥的決策樹(shù)PDF:

python sklearn 決策樹(shù)運(yùn)用
數(shù)據(jù)形式(tree.csv)
age look income orderly target older ugly low yes no young ugly high no no young handsome low no no young handsome high yes yes young handsome medium yes yes young handsome medium no no

python源代碼:
# -*- coding:utf-8*-
# 將字典 轉(zhuǎn)化為 sklearn 用的數(shù)據(jù)形式 數(shù)據(jù)型 矩陣
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
allElectronicsData = open('c:/pic/data/tree.csv','rb')
reader = csv.reader(allElectronicsData)
header = reader.next()
# print header
## 數(shù)據(jù)預(yù)處理
featureList = []
labelList = []
for row in reader:
# print row[-1]
labelList.append(row[-1])
# 下面這幾步的目的是為了讓特征值轉(zhuǎn)化成一種字典的形式,就可以調(diào)用sk-learn里面的DictVectorizer,直接將特征的類別值轉(zhuǎn)化成0,1值
rowDict = {}
for i in range(1, len(row) - 1):
rowDict[header[i]] = row[i]
featureList.append(rowDict)
for each in featureList:
print each
# Vectorize features
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
print("dummyX:"+str(dummyX))
print(vec.get_feature_names())
# label的轉(zhuǎn)化,直接用preprocessing的LabelBinarizer方法
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:"+str(dummyY))
print("labelList:"+str(labelList))
#criterion是選擇決策樹(shù)節(jié)點(diǎn)的 標(biāo)準(zhǔn) ,這里是按照“熵”為標(biāo)準(zhǔn),即ID3算法;默認(rèn)標(biāo)準(zhǔn)是gini index,即CART算法。
clf = tree.DecisionTreeClassifier()
clf = clf.fit(dummyX,dummyY)
print("clf:"+str(clf))
# 導(dǎo)入相關(guān)函數(shù),可視化決策樹(shù)
# 導(dǎo)出的結(jié)果是一個(gè)dot文件(在系統(tǒng)默認(rèn)路勁),需要安裝Graphviz才能將它住哪華為PDF或png格式
# 輸出的dot文件可以使用graphvize軟件轉(zhuǎn)為PDF,graphvize安裝目錄中的bin目錄放入到環(huán)境變量的Path中
# 使用如下命令
#cmd
# dot -Tpdf c:/tree.dot -o c:/tree.pdf
#下載地址:http://www.graphviz.org/Download_windows.php
#生成dot文件
with open("c:/tree.dot",'w') as f:
f = tree.export_graphviz(clf, feature_names= vec.get_feature_names(),out_file= f)以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 對(duì)圖片進(jìn)行簡(jiǎn)單的處理
介紹一些圖片處理的Python代碼,有了這些處理代碼,我們可以很方便的處理一些圖片,Python這里處理圖片一般都使用Pillow包,有此需求的朋友可以參考下2021-06-06
python?包(模塊?函數(shù)?類?定義?導(dǎo)入)使用詳解
這篇文章主要為大家介紹了python?包(模塊?函數(shù)?類?定義?導(dǎo)入)的使用詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
python如何派生內(nèi)置不可變類型并修改實(shí)例化行為
這篇文章主要為大家詳細(xì)介紹了python如何派生內(nèi)置不可變類型并修改實(shí)例化行為,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Python利用atexit模塊實(shí)現(xiàn)優(yōu)雅處理程序退出
Python的atexit模塊提供了一種方便的方式來(lái)注冊(cè)這些退出時(shí)執(zhí)行的函數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03

