婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 分析機器學習之決策樹Python實現

分析機器學習之決策樹Python實現

熱門標簽:百度地圖標注位置怎么修改 地圖標注視頻廣告 梅州外呼業務系統 高德地圖標注是免費的嗎 洪澤縣地圖標注 北京電信外呼系統靠譜嗎 大連crm外呼系統 無錫客服外呼系統一般多少錢 老人電話機器人

一、環境準備

在開始學習前,需要準備好相應的環境配置。這里我選擇了anaconda,創建了一個專門的虛擬環境來學習機器學習。這里關于anaconda的安裝等就不贅述了,沒有難度。

二、決策樹是什么

通俗的說,有督促學習方法就是需要一個標簽,即在知道答案的基礎上進行模型訓練。決策樹就是從數據中讀取出特定的特征,根據這些特征總結出決策規,然后使用樹結構來呈現。

三、快速入門分類樹

得益于強大的sklearn庫,讓我們使用決策樹的算法十分簡單:

在這里,我們引入紅酒數據集,這是一個很小的數據集。

from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine = load_wine()

然后我們就可以看看數據集長啥樣了:

wine.data.shape
(178, 13)
wine.target
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2])

但這么看似乎不是很直觀。我們使用pandas轉換成表格格式:

import pandas as pd
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)

可以看到,這個數據集只有178行,14列。數據量還是很小的。最后一列是我們的標簽,每個數字對應一個具體的分類。

wine.feature_names
['alcohol',
 'malic_acid',
 'ash',
 'alcalinity_of_ash',
 'magnesium',
 'total_phenols',
 'flavanoids',
 'nonflavanoid_phenols',
 'proanthocyanins',
 'color_intensity',
 'hue',
 'od280/od315_of_diluted_wines',
 'proline']

可以看到,每個列對應一個特征,如0號列對應的就是alcohol,即酒精含量。其他的以此類推。

在看完數據集后,我們直接上手訓練模型唄!

x_train,x_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3)
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(x_train,y_train)
score = clf.score(x_test,y_test) # 返回預測的準確度accuracy

先分測試集,即第一行代碼。然后我們調用函數,使用fit來訓練,score來打分。運行這段代碼,我們看看得了多少分:

百分之九十的準確率,還是十分高的。

但這么看,似乎不是很直觀啊。我們可以把這棵樹畫出來:

feature_name = ['酒精','蘋果酸','灰','灰的堿性','鎂','總酚','類黃酮','非黃烷類酚類','花青素','顏色強度','色調','od280/od315稀釋葡萄酒','脯氨酸']
import graphviz
# filled 顏色 rounded 圓角
dot_data = tree.export_graphviz(clf
                                ,feature_names=feature_name
                                ,class_names=["琴酒","雪莉","貝爾摩德"]
                                ,filled=True
                                ,rounded=True
                               )
graph = graphviz.Source(dot_data)
graph

這里我們引入了graphviz包,畫出了我們剛才的決策樹:

這里的class是隨便寫的,你也可以寫別的。

四、詳細分析入門案例

可以看到,我們這棵樹中并沒有使用所有的特征,可能只使用了四五個的樣子。我們可以使用一個函數來看看每個特征的百分比:

clf.feature_importances_
array([0.        , 0.        , 0.03388406, 0.        , 0.        ,
       0.        , 0.42702463, 0.        , 0.        , 0.24446215,
       0.        , 0.        , 0.29462916])

可以看到,我們只用了4個特征,得出了一顆樹。這么看似乎不是很直觀,我們用zip函數和對應的特征聯一下:

[*zip(feature_name,clf.feature_importances_)]
[('酒精', 0.0),
 ('蘋果酸', 0.0),
 ('灰', 0.03388405728736582),
 ('灰的堿性', 0.0),
 ('鎂', 0.0),
 ('總酚', 0.0),
 ('類黃酮', 0.42702463433869187),
 ('非黃烷類酚類', 0.0),
 ('花青素', 0.0),
 ('顏色強度', 0.24446214572197708),
 ('色調', 0.0),
 ('od280/od315稀釋葡萄酒', 0.0),
 ('脯氨酸', 0.29462916265196526)]

這樣我們就會發現,占比最大的就構成了決策樹的根節點,然后以此類推。

五、分類樹參數解釋

5.1、criterion

為了要將表格轉化為一棵樹,決策樹需要找出最佳節點和最佳的分枝方法,對分類樹來說,衡量這個“最佳”的指標叫做“不純度”。通常來說,不純度越低,決策樹對訓練集的擬合越好。現在使用的決策樹算法在分枝方法上的核心大多是圍繞在對某個不純度相關指標的最優化上。

暫且不去理解所謂不純度的概念,這個參數我們有兩種取值:entropy與gini。那么這兩種算法有什么區別呢?

比起基尼系數,信息熵對不純度更加敏感,對不純度的懲罰最強。但是在實際使用中,信息熵和基尼系數的效果基本相同。信息熵的計算比基尼系數緩慢一些,因為基尼系數的計算不涉及對數。另外,因為信息熵對不純度更加敏感,所以信息熵作為指標時,決策樹的生長會更加“精細”,因此對于高維數據或者噪音過多的數據,信息熵很容易過擬合,基尼系數在這種情況下效果往往比較好。當模型擬合程度不足的時候,即當模型在訓練集和測試集上都表現不太好的時候,使用信息熵。當然,這些不是絕對的。

簡單來說,我們在調參時可以兩個都試試,默認是gini。因為這兩個算法其實并沒有絕對說用哪個。

5.2、random_state splitter

random_state用來設置分枝中的隨機模式的參數,默認None,在高維度時隨機性會表現更明顯,低維度的數據(比如鳶尾花數據集),隨機性幾乎不會顯現。輸入任意整數,會一直長出同一棵樹,讓模型穩定下來。

splitter也是用來控制決策樹中的隨機選項的,有兩種輸入值,輸入”best",決策樹在分枝時雖然隨機,但是還是會優先選擇更重要的特征進行分枝(重要性可以通過屬性feature_importances_查看),輸入“random",決策樹在分枝時會更加隨機,樹會因為含有更多的不必要信息而更深更大,并因這些不必要信息而降低對訓練集的擬合。這也是防止過擬合的一種方式。

這兩個參數可以讓樹的模型穩定,并且更好的使用模型。

clf = tree.DecisionTreeClassifier(criterion="entropy"
                                  ,random_state=0
                                  ,splitter="random"
                                 )
clf = clf.fit(x_train, y_train)
score = clf.score(x_test, y_test)
score

比如我們添加了一些參數后,再次運行:

可以發現準確率飛到了98%,這說明我們參數的調整還是很有用的。

5.3、剪枝參數

在不加限制的情況下,一棵決策樹會生長到衡量不純度的指標最優,或者沒有更多的特征可用為止。這樣的決策樹往往會過擬合,這就是說,它會在訓練集上表現很好,在測試集上卻表現糟糕。我們收集的樣本數據不可能和整體的狀況完全一致,因此當一棵決策樹對訓練數據有了過于優秀的解釋性,它找出的規則必然包含了訓練樣本中的噪聲,并使它對未知數據的擬合程度不足。

簡單的說,我們需要對決策樹進行限制,不能讓他無限制的增長下去,不然只會讓模型過擬合。

max_depth:

限制樹的最大深度,超過設定深度的樹枝全部剪掉。這是使用的最廣泛的剪枝參數,實際使用建議從3開始嘗試。

min_samples_leaf min_samples_split:

min_samples_leaf限定,一個節點在分枝后的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分枝就不會發生,或者,分枝會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生。

min_samples_split限定,一個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分枝,否則分枝就不會發生。

這段話看起來很繞口,我們結合代碼:

clf = tree.DecisionTreeClassifier(criterion="entropy"
                                 ,random_state=30
                                 ,splitter="random"
                                 ,max_depth=4
                                #,min_samples_leaf=12
                                  #,min_samples_split=10
                                  ,
                                 )
clf = clf.fit(x_train, y_train)
dot_data = tree.export_graphviz(clf
                                ,feature_names= feature_name
                                ,class_names=["琴酒","雪莉","貝爾摩德"]
                                ,filled=True
                                ,rounded=True
                               )
graph = graphviz.Source(dot_data)
graph

可以自己去跑一下理解一下。

max_features min_impurity_decrease:

max_features限制分枝時考慮的特征個數,超過限制個數的特征都會被舍棄。和max_depth異曲同工,max_features是用來限制高維度數據的過擬合的剪枝參數,但其方法比較暴力,是直接限制可以使用的特征數量而強行使決策樹停下的參數,在不知道決策樹中的各個特征的重要性的情況下,強行設定這個參數可能會導致模型學習不足。如果希望通過降維的方式防止過擬合,建議使用PCA,ICA或者特征選擇模塊中的降維算法。

但我們怎么確定一個參數是最優的呢?我們可以通過畫圖的方式來查看:

import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
test = []
for i in range(50):
    clf = tree.DecisionTreeClassifier(max_depth=4
                                      ,criterion="entropy"
                                      ,random_state=30
                                      ,splitter="random"
                                      ,min_samples_leaf=i+5
                                     )
    clf = clf.fit(x_train, y_train)
    score = clf.score(x_test, y_test)
    test.append(score)

x_major_locator=MultipleLocator(2)
plt.plot(range(1,51),test,color="green",label="min_samples_leaf")
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.legend()
plt.show()

我們就可以清晰的看到了最高點出現在什么地方,進而更好的調參。

5.4、目標權重參數:class_weight min_weight_fraction_leaf

完成樣本標簽平衡的參數。樣本不平衡是指在一組數據集中,標簽的一類天生占有很大的比例。比如說,在銀行要判斷“一個辦了信用卡的人是否會違約”,就是是vs否(1%:99%)的比例。這種分類狀況下,即便模型什么也不做,全把結果預測成“否”,正確率也能有99%。因此我們要使用class_weight參數對樣本標簽進行一定的均衡,給少量的標簽更多的權重,讓模型更偏向少數類,向捕獲少數類的方向建模。該參數默認None,此模式表示自動給與數據集中的所有標簽相同的權重。

有了權重之后,樣本量就不再是單純地記錄數目,而是受輸入的權重影響了,因此這時候剪枝,就需要搭配min_weight_fraction_leaf這個基于權重的剪枝參數來使用。另請注意,基于權重的剪枝參數(例如min_weight_fraction_leaf)將比不知道樣本權重的標準(比如min_samples_leaf)更少偏向主導類。如果樣本是加權的,則使用基于權重的預修剪標準來更容易優化樹結構,這確保葉節點至少包含樣本權重的總和的一小部分。

以上就是分析機器學習之決策樹Python實現的詳細內容,更多關于Python實現決策樹的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python機器學習算法之決策樹算法的實現與優缺點
  • Python機器學習之決策樹
  • python機器學習實現決策樹
  • Python機器學習算法庫scikit-learn學習之決策樹實現方法詳解
  • python機器學習理論與實戰(二)決策樹
  • Python機器學習之決策樹算法
  • python機器學習之決策樹分類詳解
  • Python機器學習之決策樹算法實例詳解
  • 機器學習python實戰之決策樹

標簽:洛陽 怒江 清遠 岳陽 吉林 泉州 長春 安慶

巨人網絡通訊聲明:本文標題《分析機器學習之決策樹Python實現》,本文關鍵詞  分析,機器,學,習之,決策樹,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《分析機器學習之決策樹Python實現》相關的同類信息!
  • 本頁收集關于分析機器學習之決策樹Python實現的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲一区二区三区四区中文字幕 | 欧美日韩国产美| 欧美性三三影院| 久久综合精品国产一区二区三区| 亚洲欧洲成人精品av97| 奇米一区二区三区| 日韩视频一区二区| 日韩不卡免费视频| 宅男在线国产精品| 午夜精品久久久久久久久久 | 777奇米四色成人影色区| 亚洲午夜在线视频| 在线免费观看一区| 亚洲精品亚洲人成人网| 国产一区二区三区四| 久久久久97国产精华液好用吗 | 午夜影视日本亚洲欧洲精品| 高清国产一区二区| 精品av久久707| 精品一区二区日韩| 日本一区二区三区视频视频| 国产aⅴ精品一区二区三区色成熟| 精品电影一区二区| 成人av午夜影院| 国产精品不卡在线| 国产精品正在播放| 国产欧美综合在线| 成人免费黄色在线| 亚洲一区av在线| 欧美一区二区在线不卡| 香蕉av福利精品导航| 欧美精品久久一区二区三区| 美国av一区二区| 久久久国产精品不卡| 成a人片国产精品| 亚洲成人动漫av| 精品卡一卡二卡三卡四在线| 成人av在线影院| 捆绑调教一区二区三区| 久久久久久久久久久久电影| 国产做a爰片久久毛片| 久久久久久一二三区| 不卡的电影网站| 免费观看在线综合| 日韩美女久久久| 日本一区二区三区电影| 日韩欧美成人激情| 欧美三区免费完整视频在线观看| 国产大片一区二区| 日本三级韩国三级欧美三级| 洋洋av久久久久久久一区| 国产欧美精品一区| 精品美女一区二区| 欧美老人xxxx18| 一本久道中文字幕精品亚洲嫩| 国内精品伊人久久久久av影院 | 久久综合色播五月| 欧美综合视频在线观看| 成人h动漫精品| 国产成人综合网| 国产成人精品aa毛片| 性做久久久久久| 亚洲免费资源在线播放| 国产精品乱码人人做人人爱 | 亚洲特黄一级片| 中文字幕高清不卡| 欧美一区二区黄| 欧美一卡二卡三卡四卡| 正在播放亚洲一区| 欧美调教femdomvk| 日本丰满少妇一区二区三区| 国产在线播放一区二区三区| 亚洲国产精品尤物yw在线观看| 日韩精品一区二区三区三区免费| www.亚洲国产| 日本高清视频一区二区| 久久成人麻豆午夜电影| 亚洲欧美电影一区二区| 在线精品视频免费播放| 在线观看日韩毛片| 青青草伊人久久| 黄一区二区三区| 久久精品视频在线免费观看| 国产欧美日韩卡一| 91视频在线看| 91.麻豆视频| 免费日韩伦理电影| 欧美福利视频一区| 26uuu色噜噜精品一区二区| 亚洲愉拍自拍另类高清精品| 亚洲.国产.中文慕字在线| 337p亚洲精品色噜噜狠狠| 91精品国产综合久久精品麻豆| 视频一区在线播放| 人人爽香蕉精品| 国产精品毛片久久久久久久| 一区二区三区免费观看| 欧美高清视频一二三区 | 国产福利91精品一区| 久久久蜜桃精品| 亚洲精品久久久蜜桃| 7777精品伊人久久久大香线蕉| 欧美一区二视频| 99精品视频免费在线观看| 欧美日韩精品一区二区在线播放| 91精品免费在线观看| av不卡一区二区三区| 亚洲一区二区三区精品在线| 天堂资源在线中文精品| 国产精品久久午夜夜伦鲁鲁| 午夜精品久久久久久不卡8050 | 精品国内片67194| 99久久婷婷国产综合精品电影| 国产精品卡一卡二卡三| 欧美精品久久一区| 91在线免费看| 亚洲免费观看高清完整| 18成人在线视频| 亚洲六月丁香色婷婷综合久久| 欧美日韩高清影院| 中文字幕在线观看一区二区| 精品欧美乱码久久久久久1区2区| 亚洲一区二区三区中文字幕在线 | 国内成人精品2018免费看| 欧美一区二区三区的| 亚洲日本电影在线| 欧美精品一区二区久久婷婷| 免费成人在线影院| 美女在线视频一区| 91精品国产91综合久久蜜臀| 不卡视频一二三四| 欧美岛国在线观看| 国产日韩影视精品| 亚洲综合一二三区| 国内久久精品视频| 成人午夜激情在线| 国产精品欧美久久久久一区二区| 亚洲欧洲在线观看av| 成人综合在线观看| 成人小视频免费在线观看| 国产拍欧美日韩视频二区| 久久久精品影视| 国产成人自拍网| 国产成人av一区二区三区在线 | 精品日韩欧美一区二区| 中文字幕在线观看不卡| 高潮精品一区videoshd| 毛片一区二区三区| 久久久精品国产99久久精品芒果 | 欧美亚洲精品一区| 成人免费视频视频| 久久电影网站中文字幕| 91啦中文在线观看| 韩国在线一区二区| 精品在线一区二区| 欧美久久久久久蜜桃| 成人美女视频在线看| 日韩一区二区视频| 韩国视频一区二区| 粉嫩av亚洲一区二区图片| 亚洲国产精品成人综合| 91精品在线观看入口| 亚洲亚洲人成综合网络| 国产精品国产三级国产a| 不卡av免费在线观看| 99精品热视频| 夜夜嗨av一区二区三区网页| 午夜亚洲国产au精品一区二区| 色综合久久久久网| 福利一区福利二区| 91美女视频网站| av在线不卡电影| 麻豆国产欧美一区二区三区| 97久久人人超碰| 麻豆精品一区二区综合av| 日韩欧美一级特黄在线播放| 国产精品五月天| 精品视频免费在线| 亚洲综合一二区| 2022国产精品视频| 国产人成亚洲第一网站在线播放| 性做久久久久久免费观看欧美| 九色综合狠狠综合久久| 国产精品免费看片| 国产精品三级在线观看| av中文字幕不卡| 国产精品电影一区二区三区| 欧美三级视频在线播放| 欧美日韩一区二区欧美激情| 国产精品一区二区在线看| 成人av资源在线| 精品一区二区av| 久久久精品欧美丰满| 欧美一级片在线| 亚洲毛片av在线| 国产精品三级视频| 91视频一区二区| 国产精品夜夜爽| 久久久国际精品| 91精品在线观看入口|