graphviz 最新安裝教程適用初學(xué)者
1、首先在官網(wǎng)下載graphviz
下載網(wǎng)址:https://www.graphviz.org/download/
2、安裝。
打開(kāi)第一步已經(jīng)下載好的軟件。點(diǎn)擊下一步,在安裝路徑選擇時(shí)可將安裝路徑修改為 D:\graphviz
接著一直點(diǎn)下一步,即可安裝完成。
3、配置環(huán)境變量
右鍵點(diǎn)擊“我的電腦“”–>選擇“屬性”–>高級(jí)系統(tǒng)設(shè)置(滑到最下面)
–>環(huán)境變量–>系統(tǒng)變量中的path(雙擊)
–>將graphviz的安裝路徑下的bin文件添加進(jìn)去。如果你前面安裝的路徑是跟我一樣,直接復(fù)制這個(gè)路徑即可D:\graphviz\bin
–>多次點(diǎn)擊確定,完成環(huán)境變量配置,
4、測(cè)試
點(diǎn)擊左下角搜索,輸入“cmd”,或者 win+R鍵。
輸入 dot -version (注意dot后面后一個(gè)空格)。
若出現(xiàn)dot不是內(nèi)部或外部命令,則表示安裝失敗。
5、再次配置
接下來(lái)打開(kāi)你安裝路徑下bin文件夾下面的config6(選擇打開(kāi)方式為記事本打開(kāi))
將里面內(nèi)容刪除,復(fù)制下面這段代碼,保存即可。
import operator import math class DecisionTree: def __init__(self): pass # 加載數(shù)據(jù)集 def loadData(self): # 天氣晴(2),陰(1),雨(0);溫度炎熱(2),適中(1),寒冷(0);濕度高(1),正常(0) # 風(fēng)速?gòu)?qiáng)(1),弱(0);進(jìn)行活動(dòng)(yes),不進(jìn)行活動(dòng)(no) # 創(chuàng)建數(shù)據(jù)集 data = [ [2, 2, 1, 0, "yes"], [2, 2, 1, 1, "no"], [1, 2, 1, 0, "yes"], [0, 0, 0, 0, "yes"], [0, 0, 0, 1, "no"], [1, 0, 0, 1, "yes"], [2, 1, 1, 0, "no"], [2, 0, 0, 0, "yes"], [0, 1, 0, 0, "yes"], [2, 1, 0, 1, "yes"], [1, 2, 0, 0, "no"], [0, 1, 1, 1, "no"], ] # 分類(lèi)屬性 features = ["天氣", "溫度", "濕度", "風(fēng)速"] return data, features # 計(jì)算給定數(shù)據(jù)集的香農(nóng)熵 def ShannonEnt(self, data): numData = len(data) # 求長(zhǎng)度 labelCounts = {} for feature in data: oneLabel = feature[-1] # 獲得標(biāo)簽 # 如果標(biāo)簽不在新定義的字典里創(chuàng)建該標(biāo)簽值 labelCounts.setdefault(oneLabel, 0) # 該類(lèi)標(biāo)簽下含有數(shù)據(jù)的個(gè)數(shù) labelCounts[oneLabel] += 1 shannonEnt = 0.0 for key in labelCounts: # 同類(lèi)標(biāo)簽出現(xiàn)的概率 prob = float(labelCounts[key]) / numData # 以2為底求對(duì)數(shù) shannonEnt -= prob * math.log2(prob) return shannonEnt # 劃分?jǐn)?shù)據(jù)集,三個(gè)參數(shù)為帶劃分的數(shù)據(jù)集,劃分?jǐn)?shù)據(jù)集的特征,特征的返回值 def splitData(self, data, axis, value): retData = [] for feature in data: if feature[axis] == value: # 將相同數(shù)據(jù)集特征的抽取出來(lái) reducedFeature = feature[:axis] reducedFeature.extend(feature[axis + 1 :]) retData.append(reducedFeature) return retData # 返回一個(gè)列表 # 選擇最好的數(shù)據(jù)集劃分方式 def chooseBestFeatureToSplit(self, data): numFeature = len(data[0]) - 1 baseEntropy = self.ShannonEnt(data) bestInfoGain = 0.0 bestFeature = -1 for i in range(numFeature): # 獲取第i個(gè)特征所有的可能取值 featureList = [result[i] for result in data] # 從列表中創(chuàng)建集合,得到不重復(fù)的所有可能取值 uniqueFeatureList = set(featureList) newEntropy = 0.0 for value in uniqueFeatureList: # 以i為數(shù)據(jù)集特征,value為返回值,劃分?jǐn)?shù)據(jù)集 splitDataSet = self.splitData( data, i, value ) # 數(shù)據(jù)集特征為i的所占的比例 prob = len(splitDataSet) / float(len(data)) # 計(jì)算每種數(shù)據(jù)集的信息熵 newEntropy += prob * self.ShannonEnt(splitDataSet) infoGain = baseEntropy - newEntropy # 計(jì)算最好的信息增益,增益越大說(shuō)明所占決策權(quán)越大 if infoGain > bestInfoGain: bestInfoGain = infoGain bestFeature = i return bestFeature # 遞歸構(gòu)建決策樹(shù) def majorityCnt(self, labelsList): labelsCount = {} for vote in labelsList: if vote not in labelsCount.keys(): labelsCount[vote] = 0 labelsCount[vote] += 1 sortedLabelsCount = sorted( labelsCount.iteritems(), key=operator.itemgetter(1), reverse=True ) # 排序,True升序 # 返回出現(xiàn)次數(shù)最多的 print(sortedLabelsCount) return sortedLabelsCount[0][0] # 創(chuàng)建決策樹(shù) def createTree(self, data, features): # 使用"="產(chǎn)生的新變量,實(shí)際上兩者是一樣的,避免后面del()函數(shù)對(duì)原變量值產(chǎn)生影響 features = list(features) labelsList = [line[-1] for line in data] # 類(lèi)別完全相同則停止劃分 if labelsList.count(labelsList[0]) == len(labelsList): return labelsList[0] # 遍歷完所有特征值時(shí)返回出現(xiàn)次數(shù)最多的 if len(data[0]) == 1: return self.majorityCnt(labelsList) # 選擇最好的數(shù)據(jù)集劃分方式 bestFeature = self.chooseBestFeatureToSplit(data) bestFeatLabel = features[bestFeature] # 得到對(duì)應(yīng)的標(biāo)簽值 myTree = {bestFeatLabel: {}} # 清空f(shuō)eatures[bestFeat],在下一次使用時(shí)清零 del (features[bestFeature]) featureValues = [example[bestFeature] for example in data] uniqueFeatureValues = set(featureValues) for value in uniqueFeatureValues: subFeatures = features[:] # 遞歸調(diào)用創(chuàng)建決策樹(shù)函數(shù) myTree[bestFeatLabel][value] = self.createTree( self.splitData(data, bestFeature, value), subFeatures ) return myTree # 預(yù)測(cè)新數(shù)據(jù)特征下是否進(jìn)行活動(dòng) def predict(self, tree, features, x): for key1 in tree.keys(): secondDict = tree[key1] # key是根節(jié)點(diǎn)代表的特征,featIndex是取根節(jié)點(diǎn)特征在特征列表的索引,方便后面對(duì)輸入樣本逐變量判斷 featIndex = features.index(key1) # 這里每一個(gè)key值對(duì)應(yīng)的是根節(jié)點(diǎn)特征的不同取值 for key2 in secondDict.keys(): # 找到輸入樣本在決策樹(shù)中的由根節(jié)點(diǎn)往下走的路徑 if x[featIndex] == key2: # 該分支產(chǎn)生了一個(gè)內(nèi)部節(jié)點(diǎn),則在決策樹(shù)中繼續(xù)同樣的操作查找路徑 if type(secondDict[key2]).__name__ == "dict": classLabel = self.predict(secondDict[key2], features, x) # 該分支產(chǎn)生是葉節(jié)點(diǎn),直接取值就得到類(lèi)別 else: classLabel = secondDict[key2] return classLabel if __name__ == "__main__": dtree = DecisionTree() data, features = dtree.loadData() myTree = dtree.createTree(data, features) print(myTree) label = dtree.predict(myTree, features, [1, 1, 1, 0]) print("新數(shù)據(jù)[1,1,1,0]對(duì)應(yīng)的是否要進(jìn)行活動(dòng)為:{}".format(label))
最后再次通過(guò)cmd測(cè)試是否安裝成功。命令:dot -version (同樣注意dot后有一個(gè)空格)
出現(xiàn)這段文字。顯示dot版本和路徑,恭喜你安裝成功。
到此這篇關(guān)于graphviz 2022最新安裝教程適用初學(xué)者的文章就介紹到這了,更多相關(guān)graphviz 安裝教程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Python中通過(guò)getattr獲取對(duì)象引用的方法
今天小編就為大家分享一篇在Python中通過(guò)getattr獲取對(duì)象引用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python使用Selenium自動(dòng)進(jìn)行百度搜索的實(shí)現(xiàn)
我們今天介紹一個(gè)非常適合新手的python自動(dòng)化小項(xiàng)目,這個(gè)例子非常適合新手學(xué)習(xí)Python網(wǎng)絡(luò)自動(dòng)化,不僅能夠了解如何使用Selenium,而且還能知道一些超級(jí)好用的小工具。感興趣的可以了解一下2021-07-07利用Python腳本生成sitemap.xml的實(shí)現(xiàn)方法
最近項(xiàng)目中需要用腳本生成sitemap,中間學(xué)習(xí)了一下sitemap的格式和lxml庫(kù)的用法。把結(jié)果記錄一下,方便以后需要直接拿來(lái)用。下面這篇文章主要介紹了利用Python腳本生成sitemap.xml的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,一起來(lái)看看吧。2017-01-01openstack中的rpc遠(yuǎn)程調(diào)用的方法
今天通過(guò)本文給大家分享openstack中的rpc遠(yuǎn)程調(diào)用的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07Python reduce()函數(shù)的用法小結(jié)
reduce()函數(shù)即為化簡(jiǎn)函數(shù),它的執(zhí)行過(guò)程為:每一次迭代,都將上一次的迭代結(jié)果,需要的朋友可以參考下2017-11-11深入解析python項(xiàng)目引用運(yùn)行路徑
這篇文章主要介紹了python項(xiàng)目引用運(yùn)行路徑的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05