日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:23日期:2022-06-16 14:04:27
目錄一、環境準備二、決策樹是什么三、快速入門分類樹四、詳細分析入門案例五、分類樹參數解釋5.1、criterion5.2、random_state & splitter5.3、剪枝參數5.4、目標權重參數:class_weight & min_weight_fraction_leaf一、環境準備

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

二、決策樹是什么

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

三、快速入門分類樹

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

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

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

from sklearn import treefrom sklearn.datasets import load_winefrom sklearn.model_selection import train_test_splitwine = load_wine()

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

wine.data.shape(178, 13)wine.targetarray([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 pdpd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)

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

可以看到,這個數據集只有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來打分。運行這段代碼,我們看看得了多少分:

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

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

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

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包,畫出了我們剛才的決策樹:

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

這里的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

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

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

可以發現準確率飛到了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 pltfrom matplotlib.pyplot import MultipleLocatortest = []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()

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

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

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 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
97精品国产99久久久久久免费| 欧美日韩少妇| 日本综合视频| 午夜精品福利影院| 久久中文欧美| 婷婷激情久久| 日本视频中文字幕一区二区三区| 美女精品久久| 人人香蕉久久| 亚洲精品免费观看| 国产第一亚洲| 中文字幕一区二区精品区| 深夜福利视频一区二区| 999久久久国产精品| 美女少妇全过程你懂的久久| 红桃视频亚洲| 亚洲欧美久久精品| 国产日产高清欧美一区二区三区| 国产亚洲电影| 欧美视频久久| 欧美激情在线精品一区二区三区| 捆绑调教美女网站视频一区| 亚洲另类黄色| 欧美中文字幕| 精品视频在线你懂得| 91久久黄色| 国产精品成人**免费视频| 亚洲天堂成人| 欧美激情视频一区二区三区免费 | 老鸭窝毛片一区二区三区| 中文字幕av一区二区三区人| 国产精品tv| 久久中文字幕av一区二区不卡| 国产视频一区欧美| 国产亚洲欧美日韩在线观看一区二区 | 樱桃视频成人在线观看| 亚洲精品婷婷| 日本美女一区| 国产日本亚洲| 99视频一区| 成人在线视频免费看| 久久亚洲风情| 久久激情网站| 国产一区调教| 日本va欧美va瓶| 免费毛片在线不卡| 成人免费一区| 国产情侣一区在线| 综合激情网...| 午夜欧美视频| 麻豆国产一区| 日韩三级一区| 日韩午夜一区| 韩国三级一区| 麻豆精品99| 日本亚洲最大的色成网站www| 国产一区二区三区自拍| 日韩成人a**站| 欧美国产视频| 婷婷成人综合| 国产精品网址| 国产亚洲午夜| 成人在线免费观看网站| 日日夜夜免费精品视频| 国产va在线视频| 亚洲精品a级片| 欧美a在线观看| 亚洲午夜免费| 99精品视频在线| 国产精品免费精品自在线观看| 欧美精品羞羞答答| 久久精品免费一区二区三区| 麻豆免费精品视频| 国产精品美女在线观看直播| 无码日韩精品一区二区免费| 鲁大师影院一区二区三区| 欧美国产91| 99国产精品一区二区| 久久电影tv| 精品丝袜久久| 国产精品一区毛片| 欧美精品影院| 欧美一区在线观看视频| 深夜日韩欧美| 亚洲免费专区| 亚洲乱码视频| 亚洲永久精品唐人导航网址| 久久成人一区| 亚洲欧美日韩视频二区| 亚洲精品1区2区| 好看的亚洲午夜视频在线| 蜜臀久久99精品久久一区二区| av一区在线| 久久理论电影| 欧美美女一区| 影院欧美亚洲| 视频一区二区不卡| 亚洲久久视频| 国产亚洲一卡2卡3卡4卡新区| 国产日韩欧美在线播放不卡| 国产精品一线| 老牛国内精品亚洲成av人片 | 欧美激情aⅴ一区二区三区| 国产欧美一区二区三区国产幕精品| 欧美日本久久| 国产精品成人自拍| 精品五月天堂| 欧美另类中文字幕 | av一区在线| 欧美13videosex性极品| 国产一区二区三区四区五区传媒| 国产精品分类| 国产精品分类| 国产精品视频一区二区三区四蜜臂| 日本综合精品一区| 日本不卡一区二区三区| 日韩欧美中文在线观看| 综合五月婷婷| 偷拍亚洲精品| 日韩精品一区二区三区中文| 亚洲精选91| 热久久国产精品| 亚洲人成毛片在线播放女女| 免费不卡在线观看| 亚久久调教视频| 日韩精品五月天| 国产情侣一区| 欧美成a人片免费观看久久五月天| 国产精品免费大片| 欧美一区二区性| 国产农村妇女精品一区二区| 日韩一区二区三区免费视频| 久久av网址| 亚洲大片在线| 热久久久久久久| 欧美精品97| 久久中文视频| 日韩av电影一区| 日韩欧美一区免费| 免费视频一区二区| 久久精品理论片| 在线视频观看日韩| 日本少妇一区二区| 欧美aa在线观看| 亚洲精品看片| 福利在线免费视频| 免费国产自线拍一欧美视频| 欧美三区不卡| 91精品国产成人观看| 亚洲制服欧美另类| 精品三级av| 久久福利毛片| 鲁大师精品99久久久| 播放一区二区| 成人羞羞在线观看网站| 国产高清一区二区| 蜜臀91精品一区二区三区| 日本成人中文字幕在线视频| 欧美91在线| 天堂网av成人| 蜜臀91精品一区二区三区| 国产乱人伦精品一区| 国产精品精品| 老鸭窝毛片一区二区三区| 日韩一区二区三区在线看| 久久不见久久见免费视频7| 欧美不卡高清一区二区三区| 国产亚洲精品自拍| 国产精品一区二区免费福利视频 | 国产精品亚洲人成在99www| 韩国久久久久久| 丝袜美腿高跟呻吟高潮一区| 日韩欧美精品| 亚洲黄色影院| 精品国产亚洲一区二区三区大结局| 香蕉视频成人在线观看| 正在播放日韩精品| 在线视频亚洲欧美中文| 免费福利视频一区二区三区| 日本午夜精品一区二区三区电影| 成人av二区| 精品久久电影| 日韩成人午夜精品| 五月天久久777| 中文在线а√天堂| 国产精品一卡| 亚洲精品乱码日韩| 一本一道久久a久久精品蜜桃| 狠狠久久伊人| 日本午夜精品久久久| 制服诱惑一区二区| 久久久久国产一区二区| 国产精品v一区二区三区| 免费精品视频在线| 米奇777超碰欧美日韩亚洲| 高清久久精品| 国产日韩一区二区三区在线播放| 亚洲在线免费| 黄色不卡一区| 久久高清免费|