python?sklearn?畫出決策樹并保存為PDF的實(shí)現(xiàn)過程
利用sklearn畫出決策樹并保存為PDF
下載Graphviz
進(jìn)入官網(wǎng)下載并安裝:
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
并將下列路徑配置為環(huán)境變量:
- D:\software\Graphviz\bin
在cmd中測試:
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")
可以生成一張賊帥的決策樹PDF:
python sklearn 決策樹運(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是選擇決策樹節(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ù),可視化決策樹 # 導(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的urllib2模塊處理url和圖片的技巧兩則
這篇文章主要介紹了使用Python的urllib2模塊處理url和圖片的兩個(gè)小技巧,分別是獲取帶有中文參數(shù)的url內(nèi)容和獲取遠(yuǎn)程圖片的大小和尺寸,需要的朋友可以參考下2016-02-02Python實(shí)現(xiàn)數(shù)據(jù)地址實(shí)體抽取
大家好,本篇文章主要講的是Python實(shí)現(xiàn)數(shù)據(jù)地址實(shí)體抽取,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02Macbook air m1安裝python/anaconda全過程(圖文)
這篇文章主要介紹了Macbook air m1安裝python/anaconda全過程(圖文),文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03pytorch使用voc分割數(shù)據(jù)集訓(xùn)練FCN流程講解
這篇文章主要介紹了pytorch使用voc分割數(shù)據(jù)集訓(xùn)練FCN流程,圖像分割發(fā)展過程也經(jīng)歷了傳統(tǒng)算法到深度學(xué)習(xí)算法的轉(zhuǎn)變,傳統(tǒng)的分割算法包括閾值分割、分水嶺、邊緣檢測等等2022-12-12Python語法學(xué)習(xí)之進(jìn)程池與進(jìn)程鎖詳解
這篇文章主要為大家介紹了Python進(jìn)程中兩個(gè)重要的知識(shí)點(diǎn):進(jìn)程池與進(jìn)程鎖,文中通過示例詳細(xì)為大家講解了二者的使用,感興趣的可以了解下2022-04-04python入門課程第四講之內(nèi)置數(shù)據(jù)類型有哪些
這篇文章主要介紹了python入門課程第四講之內(nèi)置數(shù)據(jù)類型有哪些?本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09