首頁 > 軟體

graphviz 最新安裝教學適用初學者

2023-02-10 06:01:32

1、首先在官網下載graphviz

下載網址:https://www.graphviz.org/download/

2、安裝。

開啟第一步已經下載好的軟體。點選下一步,在安裝路徑選擇時可將安裝路徑修改為 D:graphviz
接著一直點下一步,即可安裝完成。

3、設定環境變數

右鍵點選“我的電腦“”–>選擇“屬性”–>高階系統設定(滑到最下面)

–>環境變數–>系統變數中的path(雙擊)

–>將graphviz的安裝路徑下的bin檔案新增進去。如果你前面安裝的路徑是跟我一樣,直接複製這個路徑即可D:graphvizbin

–>多次點選確定,完成環境變數設定,

4、測試

點選左下角搜尋,輸入“cmd”,或者 win+R鍵。
輸入 dot -version (注意dot後面後一個空格)。
若出現dot不是內部或外部命令,則表示安裝失敗。

5、再次設定

接下來開啟你安裝路徑下bin資料夾下面的config6(選擇開啟方式為記事本開啟)

將裡面內容刪除,複製下面這段程式碼,儲存即可。

import operator
import math

class DecisionTree:
    def __init__(self):
        pass

    # 載入資料集
    def loadData(self):
        # 天氣晴(2),陰(1),雨(0);溫度炎熱(2),適中(1),寒冷(0);溼度高(1),正常(0)
        # 風速強(1),弱(0);進行活動(yes),不進行活動(no)
        # 建立資料集
        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"],
        ]
        # 分類屬性
        features = ["天氣", "溫度", "溼度", "風速"]
        return data, features

    # 計算給定資料集的夏農熵
    def ShannonEnt(self, data):
        numData = len(data)  # 求長度
        labelCounts = {}
        for feature in data:
            oneLabel = feature[-1]  # 獲得標籤
            # 如果標籤不在新定義的字典裡建立該標籤值
            labelCounts.setdefault(oneLabel, 0)
            # 該類標籤下含有資料的個數
            labelCounts[oneLabel] += 1
        shannonEnt = 0.0
        for key in labelCounts:
            # 同類標籤出現的概率
            prob = float(labelCounts[key]) / numData
            # 以2為底求對數
            shannonEnt -= prob * math.log2(prob)
        return shannonEnt

    # 劃分資料集,三個引數為帶劃分的資料集,劃分資料集的特徵,特徵的返回值
    def splitData(self, data, axis, value):
        retData = []
        for feature in data:
            if feature[axis] == value:
                # 將相同資料集特徵的抽取出來
                reducedFeature = feature[:axis]
                reducedFeature.extend(feature[axis + 1 :])
                retData.append(reducedFeature)
        return retData  # 返回一個列表

    # 選擇最好的資料集劃分方式
    def chooseBestFeatureToSplit(self, data):
        numFeature = len(data[0]) - 1
        baseEntropy = self.ShannonEnt(data)
        bestInfoGain = 0.0
        bestFeature = -1
        for i in range(numFeature):
            # 獲取第i個特徵所有的可能取值
            featureList = [result[i] for result in data]
            # 從列表中建立集合,得到不重複的所有可能取值
            uniqueFeatureList = set(featureList)
            newEntropy = 0.0
            for value in uniqueFeatureList:
                # 以i為資料集特徵,value為返回值,劃分資料集
                splitDataSet = self.splitData( data, i, value )
                # 資料集特徵為i的所佔的比例
                prob = len(splitDataSet) / float(len(data))
                # 計算每種資料集的資訊熵
                newEntropy += prob * self.ShannonEnt(splitDataSet)
            infoGain = baseEntropy - newEntropy
            # 計算最好的資訊增益,增益越大說明所佔決策權越大
            if infoGain > bestInfoGain:
                bestInfoGain = infoGain
                bestFeature = i
        return bestFeature

    # 遞迴構建決策樹
    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升序
        # 返回出現次數最多的
        print(sortedLabelsCount)
        return sortedLabelsCount[0][0]

    # 建立決策樹
    def createTree(self, data, features):
        # 使用"="產生的新變數,實際上兩者是一樣的,避免後面del()函數對原變數值產生影響
        features = list(features)
        labelsList = [line[-1] for line in data]
        # 類別完全相同則停止劃分
        if labelsList.count(labelsList[0]) == len(labelsList):
            return labelsList[0]
        # 遍歷完所有特徵值時返回出現次數最多的
        if len(data[0]) == 1:
            return self.majorityCnt(labelsList)
        # 選擇最好的資料集劃分方式
        bestFeature = self.chooseBestFeatureToSplit(data)
        bestFeatLabel = features[bestFeature]  # 得到對應的標籤值
        myTree = {bestFeatLabel: {}}
        # 清空features[bestFeat],在下一次使用時清零
        del (features[bestFeature])
        featureValues = [example[bestFeature] for example in data]
        uniqueFeatureValues = set(featureValues)
        for value in uniqueFeatureValues:
            subFeatures = features[:]
            # 遞迴呼叫建立決策樹函數
            myTree[bestFeatLabel][value] = self.createTree(
                self.splitData(data, bestFeature, value), subFeatures
            )
        return myTree

    # 預測新資料特徵下是否進行活動
    def predict(self, tree, features, x):
        for key1 in tree.keys():
            secondDict = tree[key1]
            # key是根節點代表的特徵,featIndex是取根節點特徵在特徵列表的索引,方便後面對輸入樣本逐變數判斷
            featIndex = features.index(key1)
            # 這裡每一個key值對應的是根節點特徵的不同取值
            for key2 in secondDict.keys():
                # 找到輸入樣本在決策樹中的由根節點往下走的路徑
                if x[featIndex] == key2:
                    # 該分支產生了一個內部節點,則在決策樹中繼續同樣的操作查詢路徑
                    if type(secondDict[key2]).__name__ == "dict":
                        classLabel = self.predict(secondDict[key2], features, x)
                    # 該分支產生是葉節點,直接取值就得到類別
                    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("新資料[1,1,1,0]對應的是否要進行活動為:{}".format(label))

最後再次通過cmd測試是否安裝成功。命令:dot -version (同樣注意dot後有一個空格)

出現這段文字。顯示dot版本和路徑,恭喜你安裝成功。

到此這篇關於graphviz 2022最新安裝教學適用初學者的文章就介紹到這了,更多相關graphviz 安裝教學內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com