決策樹算法實例操演——基于ModelArts平臺(小白機器學習初體驗)

      網友投稿 708 2022-05-29

      一、決策樹算法簡介

      決策樹算法是機器學習的經典算法之一,產生于上世紀六十年代,當下主要分為ID3算法、C4.5算法以及CART算法。ID3算法和C4.5算法核心思想均為通過計算樣本信息熵進行分類,兩者的區別在于ID3算法基于信息增益作為特征選擇的指標,而C4.5則是基于信息增益率作為特征選擇的指標,本例中使用ID3算法進行分類。CART算法則是使用基尼指數作為特征選擇的指標。

      二、ID3算法的基本思想

      ID3算法的核心是統計學中信息熵的概念,通過計算信息熵來判斷該數據樣本的“純度”,信息熵越大,數據樣本越不“純”,分類需要的數據量就越大。

      信息熵的計算公式:

      i

      n

      f

      決策樹算法實例操演——基于ModelArts平臺(小白機器學習初體驗)

      o

      (

      D

      )

      info(D)

      info(D)=-

      i

      =

      1

      k

      p

      i

      ?

      log

      ?

      2

      (

      p

      i

      )

      \displaystyle\sum_{i=1}^{k} p_i*\log_2(p_i)

      i=1∑k pi ?log2 (pi )

      其中

      p

      i

      p_i

      pi 是概率

      下面介紹一下ID3算法的步驟

      1.計算類別信息熵

      將所得到的數據集按照類別逐個計算其信息熵再相加,假設在數據集D中有k個類別,且第i個類別在數據集中所占的概率為

      p

      i

      p_i

      pi ,則信息類別熵為:

      i

      n

      f

      o

      (

      D

      )

      info(D)

      info(D)=-

      i

      =

      1

      k

      p

      i

      ?

      log

      ?

      2

      (

      p

      i

      )

      \displaystyle\sum_{i=1}^{k} p_i*\log_2(p_i)

      i=1∑k pi ?log2 (pi )

      2.計算每個特征的信息熵

      將數據集根據某個特征進行分類后,計算該種特征的條件下各種類別的類別信息熵,也稱條件熵。假設將數據集按照特征A進行分類,且A有m個類別,則其計算公式為:

      i

      n

      f

      o

      A

      (

      D

      )

      info_A(D)

      infoA (D)=-

      j

      =

      1

      m

      D

      j

      /

      D

      ?

      i

      n

      f

      o

      (

      D

      j

      )

      \displaystyle\sum_{j=1}^{m} |D_j|/|D|*info(D_j)

      j=1∑m ∣Dj ∣/∣D∣?info(Dj )

      其中的

      D

      j

      D_j

      Dj 是指數據集的類別在A特征的各個類別下的樣本數量

      (注意數據集的類別和A特征的類別是不同的概念,比如要在一個數據集中判斷一個人在某天心情的好壞,好和壞就是數據集的類別,而一天中有一個特征是天氣,天氣的類別是晴天、雨天和陰天,我們要算的是心情好和壞分別在晴天,雨天和陰天中的分布的離散情況)

      其他特征的條件熵也是相同的計算方法

      3.計算信息增益

      通過前面兩個步驟我們得到了數據集的信息熵和屬于各個特征的條件熵,根據第二個步驟我先進行的分類再進行信息熵(或者說條件熵)的計算,分類之后數據的混亂程度肯定降低,也就是說條件熵會小于數據集的信息熵,信息增益則是條件熵和信息熵之間的差值,用來衡量使用該特征分類的效果好壞,假設用特征A進行分類,其信息增益公式為:

      G

      a

      i

      n

      (

      A

      )

      Gain(A)

      Gain(A)=

      i

      n

      f

      o

      (

      D

      )

      info(D)

      info(D)-

      i

      n

      f

      o

      A

      (

      D

      )

      info_A(D)

      infoA (D)

      通常我們選擇信息增益最大的特征作為分類的節點

      三、基于ModelArts平臺實現ID3算法

      1.數據集來源

      數據集選用的是AIGallery的表格類型數據集《硬盤故障預測數據集》

      網址鏈接:https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=1b5d6ec0-adc0-4fdd-b03f-fecad119eab5

      2.sklearn實現模型部署

      #導入相關庫 import matplotlib.pyplot as plt import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn import tree from sklearn.metrics import accuracy_score import time #載入數據集 train_test_set = pd.read_csv("dataset_2020.csv",header=0) data = train_test_set.values #分出標簽集和特征集 features = data[::,5::2] lables = data[::,4] features = pd.DataFrame(features) lables = pd.DataFrame(lables) lables = lables.astype("float32") #刪去整列都是空值的列 features = features.dropna(axis=1,how="all") #將缺失值用中位數填充 features = np.array(features) for i in range(features.shape[1]): temp = np.array(features)[:,i].tolist() median = np.nanmedian(temp) features[np.argwhere(pd.isna(features[:,i].T)),i] = median features = pd.DataFrame(features,dtype="float32") #分出訓練集和測試集 train_features,test_features,train_lables,test_lables = train_test_split(features,lables,test_size=0.33,random_state=0) time_1 = time.time() #選用ID3算法 clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=10, splitter='random', ) clf.fit(train_features,train_lables) time_2 = time.time() print('Training cost:{}s'.format(time_2-time_1)) #預測 test_predict = clf.predict(test_features) time_3 = time.time() print("Predicting cost:{}s".format(time_3-time_2)) #得分 score = accuracy_score(test_lables,test_predict) print("score is {}".format(score)) #學習曲線 scores1 = [] for x in range(4,20): clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=10, #使得每一次生成的樹都一樣 splitter='random',#分類的特征隨機,減少過擬合的可能性 max_depth=x #樹的最大深度 ) clf.fit(train_features,train_lables) test_predict = clf.predict(test_features) score = accuracy_score(test_lables,test_predict) scores1.append(score) plt.plot(range(4,20),scores1,color='red',label="max_depth") plt.legend() plt.show() scores2 = [] for y in range(2,30): clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=10, splitter='random', max_depth=18, min_samples_split=y #至少有y個樣本才會分枝 ) clf.fit(train_features,train_lables) test_predict = clf.predict(test_features) score = accuracy_score(test_lables,test_predict) scores2.append(score) plt.plot(range(2,30),scores2,color='red',label="min_samples_split") plt.legend() plt.show() #手動調參到目前為止效果最好的參數 clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=10, splitter='random', max_depth=18, min_samples_split=16, ) clf.fit(train_features,train_lables) test_predict = clf.predict(test_features) score = accuracy_score(test_lables,test_predict) print(score) #目前最好的預測得分達到0.7815

      3.部分參數解釋

      tree.DecisionTreeClassifier():

      criterion:決策樹衡量劃分質量的方法,默認值為‘gini’(基尼指數),默認值下為CART算法,另外一個可選參數為 ‘entropy’(信息增益),選擇此參數為ID3算法。

      random_state:默認值為 ‘None’,可任意設為一個常數,設為常數時可以簡單理解為使得每次運行模型都會得到一個相同的樹。

      splitter:節點劃分策略,默認值為 ‘best’(最優劃分),模型會在特征的所有劃分點中找出最優的劃分點;可選參數有 ‘random’(隨機局部最優劃分),模型會隨機地在部分劃分點中找到局部最優的劃分點。'best’適合樣本量不大的情況下, 'random’適合樣本量比較大的時候,是減少過擬合的方法之一。

      max_depth:樹的最大深度,默認值為 ‘None’,指定模型中樹的的最大深度。

      min_samples_split:內部節點能繼續劃分所包含的最小樣本數,是防止過擬合的方法之一。

      AI開發平臺ModelArts 決策樹 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:(exynos4412)Tiny4412裸機開發-點亮LED燈
      下一篇:實例說明optimize table在優化MySQL時很重要
      相關文章
      国产午夜亚洲精品国产| 久久精品国产亚洲麻豆| 五月天网站亚洲小说| 亚洲人成网站色在线入口| 亚洲国产av玩弄放荡人妇| 亚洲大成色www永久网址| 久久精品国产亚洲AV蜜臀色欲| 亚洲欧洲春色校园另类小说| 久久狠狠高潮亚洲精品| 亚洲人成电影福利在线播放| 亚洲第一福利视频| 亚洲一区二区影院| 亚洲黄色免费观看| 亚洲第一页在线播放| 亚洲国产日韩在线人成下载| 亚洲精品免费在线| 亚洲一本之道高清乱码| 亚洲AV无码精品蜜桃| 亚洲高清视频在线| 亚洲爆乳AAA无码专区| 国产精品久久久久久亚洲影视 | 亚洲av无码乱码国产精品| 国产亚洲精品美女久久久| 亚洲精品你懂的在线观看 | 日韩亚洲国产高清免费视频| 亚洲天堂2017无码中文| 亚洲熟妇AV一区二区三区宅男| 亚洲色偷精品一区二区三区| 欧美激情综合亚洲一二区| 亚洲第一黄片大全| 亚洲伊人色欲综合网| 亚洲国产精品无码久久一区二区| 婷婷久久久亚洲欧洲日产国码AV| 亚洲国产人成网站在线电影动漫| 18亚洲男同志videos网站| 亚洲一区中文字幕在线电影网| 亚洲综合色婷婷在线观看| 国产亚洲精品美女| 亚洲线精品一区二区三区| 亚洲人成在线影院| 亚洲一级毛片视频|