一、什么是決策樹(decision tree)——機器學(xué)習(xí)中的一個重要的分類算法
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)定安免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。決策樹是一個類似于數(shù)據(jù)流程圖的樹結(jié)構(gòu):其中,每個內(nèi)部節(jié)點表示一個屬性上的測試,每個分支代表一個屬性輸出,而每個樹葉結(jié)點代表類或者類的分布,樹的最頂層是根結(jié)點
根據(jù)天氣情況決定出游與否的案例
二、決策樹算法構(gòu)建
2.1決策樹的核心思路
特征選擇:從訓(xùn)練數(shù)據(jù)的特征中選擇一個特征作為當前節(jié)點的分裂標準(特征選擇的標準不同產(chǎn)生了不同的特征決策樹算法)。
決策樹生成:根據(jù)所選特征評估標準,從上至下遞歸地生成子節(jié)點,直到數(shù)據(jù)集不可分則停止決策樹停止聲場。
剪枝:決策樹容易過擬合,需要剪枝來縮小樹的結(jié)構(gòu)和規(guī)模(包括預(yù)剪枝和后剪枝)。
2.2 熵的概念:度量信息的方式
實現(xiàn)決策樹的算法包括ID3、C4.5算法等。常見的ID3核心思想是以信息增益度量屬性選擇,選擇分裂后信息增益大的屬性進行分裂。
一條信息的信息量大小和它的不確定性有直接的關(guān)系,要搞清楚一件非常不確定的事情,或者是我們一無所知的事情,需要大量的信息====>信息量的度量就等于不確定性的 多少。也就是說變量的不確定性越大,熵就越大
信息熵的計算公司
S為所有事件集合,p為發(fā)生概率,c為特征總數(shù)。
信息增益(information gain)是指信息劃分前后的熵的變化,也就是說由于使用這個屬性分割樣例而導(dǎo)致的期望熵降低。也就是說,信息增益就是原有信息熵與屬性劃分后信息熵(需要對劃分后的信息熵取期望值)的差值,具體計算如下:
其中,第二項為屬性A對S劃分的期望信息。
三、IDE3決策樹的Python實現(xiàn)
以下面這個不同年齡段的人買電腦的情況為例子建模型算法
''' Created on 2018年7月5日 使用python內(nèi)的科學(xué)計算的庫實現(xiàn)利用決策樹解決問題 @author: lenovo ''' #coding:utf-8 from sklearn.feature_extraction import DictVectorizer #數(shù)據(jù)存儲的格式 python自帶不需要安裝 import csv #預(yù)處理的包 from sklearn import preprocessing from sklearn.externals.six import StringIO from sklearn.tree import tree from sklearn.tree import export_graphviz ''' 文件保存格式需要是utf-8 window中的目錄形式需要是左斜杠 F:/AA_BigData/test_data/test1.csv excel表格存儲成csv格式并且是utf-8格式的編碼 ''' ''' 決策樹數(shù)據(jù)源讀取 scklearn要求的數(shù)據(jù)類型 特征值屬性必須是數(shù)值型的 需要對數(shù)據(jù)進行預(yù)處理 ''' #裝特征的值 featureList=[] #裝類別的詞 labelList=[] with open("F:/AA_BigData/test_data/decision_tree.csv", "r",encoding="utf-8") as csvfile: decision =csv.reader(csvfile) headers =[] row =1 for item in decision: if row==1: row=row+1 for head in item: headers.append(head) else: itemDict={} labelList.append(item[len(item)-1]) for num in range(1,len(item)-1): # print(item[num]) itemDict[headers[num]]=item[num] featureList.append(itemDict) print(headers) print(labelList) print(featureList) ''' 將原始數(shù)據(jù)轉(zhuǎn)換成包含有字典的List 將建好的包含字典的list用DictVectorizer對象轉(zhuǎn)換成0-1矩陣 ''' vec =DictVectorizer() dumyX =vec.fit_transform(featureList).toarray(); #對于類別使用同樣的方法 lb =preprocessing.LabelBinarizer() dumyY=lb.fit_transform(labelList) print(dumyY) ''' 1.構(gòu)建分類器——決策樹模型 2.使用數(shù)據(jù)訓(xùn)練決策樹模型 ''' clf =tree.DecisionTreeClassifier(criterion="entropy") clf.fit(dumyX,dumyY) print(str(clf)) ''' 1.將生成的分類器轉(zhuǎn)換成dot格式的 數(shù)據(jù) 2.在命令行中dot -Tpdf iris.dot -o output.pdf將dot文件轉(zhuǎn)換成pdf圖的文件 ''' #視頻上講的不適用python3.5 with open("F:/AA_BigData/test_data/decisiontree.dot", "w") as wFile: export_graphviz(clf,out_file=wFile,feature_names=vec.get_feature_names())
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。