九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
以鳶尾花數(shù)據(jù)集為例,用Python對決策樹進行分類
全文共

4730

字,預(yù)計學(xué)習(xí)時長

10

分鐘

圖片來源:https://www.pexels.com/@andree-brennan-974943

基于多種原因,決策樹是一種廣受歡迎的監(jiān)督學(xué)習(xí)方法。決策樹的優(yōu)點包括可以同時用于回歸和分類,易于解釋且不需要特征縮放。同時決策樹也存在劣勢,容易出現(xiàn)過度擬合就是其中之一。本教程主要介紹了用于分類的決策樹,也稱為分類樹。

此外,本教程還將涵蓋:

· 分類樹的解剖結(jié)構(gòu)(樹的深度、根節(jié)點、決策節(jié)點、葉節(jié)點/終端節(jié)點)。

· 分類樹如何進行預(yù)測

· 如何使用scikit-learn(Python)制作分類樹

· 超參數(shù)調(diào)整

現(xiàn)在,讓我們開始吧!

什么是分類樹?

分類和回歸樹(CART)術(shù)語最早由利奧·布雷曼提出,用于指代可以用于分類或回歸預(yù)測建模問題的決策樹算法。本篇文章主要涵蓋分類樹。

分類樹

本質(zhì)上,分類樹就是設(shè)計一系列問題來進行分類。下圖是在鳶尾花數(shù)據(jù)集(花種)上訓(xùn)練的分類樹。根(棕色)和決策(藍色)節(jié)點包含分成子節(jié)點的問題。根節(jié)點是最頂層的決策節(jié)點。換句話說,它是開始進行分類的節(jié)點。葉節(jié)點(綠色),也稱為終端節(jié)點,是沒有子節(jié)點的節(jié)點。葉節(jié)點是通過多數(shù)投票分配類的地方。

分類樹到三種花種之一的分類(鳶尾花數(shù)據(jù)集)

如何使用分類樹

要使用分類樹,請從根節(jié)點(棕色)開始,然后一直進行分類,直到到達葉(終端)節(jié)點。使用下圖中的分類樹,想象有一朵花,花瓣長4.5厘米,然后對其進行分類。從根節(jié)點開始,首先設(shè)置第一個問題,“花瓣長度(cm)是否≤2.45”?長度若大于2.45,則為假。接著進入下一個決策節(jié)點,“花瓣長度(cm)是否≤4.95”?這是真的,所以你可以推測花種為雜色。這只是一個例子。

分類樹是如何生成的?(非數(shù)學(xué)版)

分類樹學(xué)習(xí)一系列是否/然后問題,每個問題涉及一個特征和一個分裂點。查看一下部分樹(A),問題:“花瓣長度(cm)≤2.45”根據(jù)某個值(在這種情況下為2.45)將數(shù)據(jù)分成兩個分支。節(jié)點之間的值稱為分裂點。分裂點的值取得好(導(dǎo)致最大信息增益的值)是分類能否有序進行的關(guān)鍵。查看下圖中的B部分,分割點左側(cè)的所有點都被歸為藍色鳶尾花,而分割點右側(cè)的所有點都被分類為雜色鳶尾花。

該圖顯示38個點都被正確歸為藍色。它是一個純節(jié)點。分類樹不會在純節(jié)點上分割。這不會產(chǎn)生下一步信息增益。但是,不純的節(jié)點可以進行下一步分類。請注意,圖B的右側(cè)顯示許多點被錯誤分類為雜色鳶尾花。換句話說,它包含兩個不同類別的點(virginica和versicolor)。分類樹是一種貪婪算法,默認情況下還將繼續(xù)分裂,直到有一個純節(jié)點。同樣,算法選擇也會為不純節(jié)點選擇最佳分類點(我們將在下一節(jié)中介紹數(shù)學(xué)方法)

在上圖中,樹的最大深度為2。樹深度可以衡量在進行預(yù)測之前可以進行多少次分裂。這個過程可以繼續(xù)進行更多分裂,直到樹盡可能純凈。分裂過程中的大量重復(fù)可能會導(dǎo)致形成擁有很多節(jié)點的分類樹。通常會導(dǎo)致訓(xùn)練數(shù)據(jù)集過度擬合。幸運的是,實現(xiàn)大多數(shù)分類樹支持預(yù)剪枝來控制樹的最大深度,從而減少過度擬合。例如,Python的scikit-learn就支持預(yù)剪枝。換句話說,你可以設(shè)置最大深度以防止決策樹過深。為直觀了解最大深度,可以查看下圖。

鳶尾花數(shù)據(jù)集適合的不同深度分類樹。

選擇標準

本節(jié)主要解答如何計算信息增益和兩個標準即基尼和熵。

本節(jié)實際上是關(guān)于如何理解分類樹上根/決策節(jié)點的良好分割點。決策樹在特征和相應(yīng)的分裂點上分離,產(chǎn)生給定標準的最大信息增益(IG)(在該示例中為基尼或熵)。我們可以將信息收益大概定義為:

IG = information before splitting (parent) — information after splitting (children)

為了更清楚地了解父節(jié)點和子節(jié)點,請查看下列決策樹。

以下是更恰當?shù)男畔⒃鲆婀健?/p>

由于分類樹具有二進制分割,因此可以將公式簡化如下。

可以使用基尼指數(shù)和熵作為度量不純節(jié)點的標準。

為了更好理解這些公式,下圖展示了如何使用基尼系數(shù)來計算決策樹的信息增益。

下圖顯示了如何計算使用熵決策樹的信息增益。

本文不打算詳細討論這個問題,因為應(yīng)該注意的是,不同的不純度測量(基尼指數(shù)和熵)通常會產(chǎn)生類似的結(jié)果。下圖顯示基尼指數(shù)和熵有相似的不純度標準。scikit-learn中的默認設(shè)置為Gini的原因之一可能是計算熵會慢一點(因為它使用了對數(shù))。

不同的不純度測量(基尼指數(shù)和熵)通常產(chǎn)生類似的結(jié)果。感謝Data Science StackExchange和Sebastian Raschka提供此圖。

在本節(jié)結(jié)束之前,應(yīng)該注意到各種決策樹算法彼此不同。ID3,C4.5和CART算法使用較為普遍。Scikit-learn使用CART算法的優(yōu)化版本。

使用Python的分類樹

前面幾節(jié)介紹了分類樹的理論。學(xué)習(xí)如何用編程語言制作決策樹的好處之一是處理數(shù)據(jù)有助于理解算法。

加載數(shù)據(jù)集

鳶尾花數(shù)據(jù)集是scikit-learn附帶的數(shù)據(jù)集之一,不需要從某個外部網(wǎng)站下載任何文件。下面的代碼加載了鳶尾花數(shù)據(jù)集。

import pandas as pdfrom sklearn.datasets import load_irisdata = load_iris()data = load_iris()df = pd.DataFrame(data.data, columns=data.feature_names)df['target'] = data.target

原始df(功能+目標)

將數(shù)據(jù)拆分為訓(xùn)練和測試集

下面的代碼將75%的數(shù)據(jù)放入訓(xùn)練集,25%的數(shù)據(jù)放入測試集。

X_train, X_test, Y_train, Y_test = train_test_split(df[data.feature_names], df['target'], random_state=0)

圖像中的顏色表示來自數(shù)據(jù)幀df的數(shù)據(jù)用于此特定列車測試分割的變量(X_train,X_test,Y_train,Y_test)。

請注意,使用決策樹的一個好處是不必將數(shù)據(jù)標準化,這與PCA和邏輯回歸不同,后者對不標準化數(shù)據(jù)造成的影響異常敏感。

Scikit-learn 4步建模模式

第1步:導(dǎo)入要使用的模型

在scikit-learn中,所有機器學(xué)習(xí)模型都是作為Python類實現(xiàn)。

from sklearn.tree import DecisionTreeClassifier

第2步:創(chuàng)建模型的實例

在下列代碼中,設(shè)置max_depth = 2來預(yù)剪枝,以確保樹深不超過2。本教程的下一節(jié)將討論如何為樹選擇最佳的最大縱深。

另請注意,在下列代碼中,使random_state = 0,以便你可以得出相同的結(jié)果。

clf = DecisionTreeClassifier(max_depth = 2,  random_state = 0)

第3步:在數(shù)據(jù)上訓(xùn)練模型

該模型正在學(xué)習(xí)X(萼片長度,萼片寬度,花瓣長度和花瓣寬度)與Y(鳶尾花種類)之間的關(guān)系

clf.fit(X_train, Y_train)

第4步:預(yù)測測試數(shù)據(jù)標簽

# Predict for 1 observationclf.predict(X_test.iloc[0].values.reshape(1, -1))# Predict for multiple observationsclf.predict(X_test[0:10])

請記住,預(yù)測只是葉節(jié)點中實例的多數(shù)類。

測量模型性能

雖然還有其他方法可以測量模型性能(精度,召回率,F(xiàn)1分數(shù),ROC曲線等),但我們將簡單地將精度用作指標。

將準確度定義為:

(正確預(yù)測的分數(shù)):正確預(yù)測/數(shù)據(jù)點總數(shù)

# The score method returns the accuracy of the modelscore = clf.score(X_test, Y_test)print(score)

調(diào)整樹的深度

找到最佳的max_depth是調(diào)整模型的一種方法。以下代碼輸出具有不同max_depth的決策樹的準確性。

 max_depth.# List of values to try for max_depth:max_depth_range = list(range(1, 6))# List to store the average RMSE for each value of max_depth:accuracy = []for depth in max_depth_range:  clf = DecisionTreeClassifier(max_depth = depth,  random_state = 0) clf.fit(X_train, Y_train)   score = clf.score(X_test, Y_test) accuracy.append(score)

由于下圖顯示當max_depth大于或等于3時,準確度最高,所以最好設(shè)置max_depth = 3才最簡單。

選擇max_depth = 3是因為這一模型既準確又不復(fù)雜。

記住max_depth與決策樹的深度不同至關(guān)重要。設(shè)置max_depth是一種預(yù)剪枝決策樹的方法。換句話說,如果樹在深度上已經(jīng)盡可能純凈,它將不會繼續(xù)分裂。下圖顯示了max_depth值為3,4和5的決策樹。請注意,max_depth為4和5的樹是相同的,樹深都為4。

請注意我們?nèi)绾螕碛袃蓚€完全相同的樹。

如果你想知道訓(xùn)練決策樹的深度是多少,可以使用get_depth方法。此外,你可以使用get_n_leaves方法獲取受過訓(xùn)練的決策樹的葉節(jié)點數(shù)。

雖然本教程已經(jīng)介紹了改變選擇標準(基尼指數(shù),熵等)和max_depth,但請記住,你還可以調(diào)整要拆分的節(jié)點的最小樣本(min_samples_leaf),最大葉節(jié)點數(shù)(max_leaf_nodes)和其他。

特征重要性

分類樹的一個優(yōu)點是相對而言其更容易解釋。scikit-learn中的分類樹可以計算特征重要性,即由于對給定特征進行拆分而導(dǎo)致的基尼指數(shù)或熵減少的總量。Scikit-learn輸出的特征為0到1之間的數(shù)字。將所有特征重要性歸化為總和1。下面的代碼顯示決策樹模型中每個特征的特征重要性。

importances = pd.DataFrame({'feature':X_train.columns,'importance':np.round(clf.feature_importances_,3)})importances = importances.sort_values('importance',ascending=False)

在上面的示例中(對于鳶尾花的特定訓(xùn)練測試分類),花瓣寬度具有最高的特征重要性。可以通過查看相應(yīng)的決策樹來確認。

這個決策樹分裂的唯一兩個特征是花瓣寬度(cm)和花瓣長度(cm)

請記住,如果某個特征重要性值較低,并不一定意味著該特征對預(yù)測不重要,這只是意味著在樹早期的特定階段不會選擇該特定特征。也可能該特征與另一個信息特征相同或高度相關(guān)。特征重要性值也不會告訴你哪個類可以預(yù)測,或者哪些特征之間的關(guān)系可能會影響預(yù)測。請務(wù)必注意,在執(zhí)行交叉驗證或類似操作時,你可以使用多個訓(xùn)練測試分類中特征重要性的平均值。

結(jié)論

分類和回歸樹(CART)技術(shù)已有些年頭了(1984)是復(fù)雜技術(shù)的基礎(chǔ)。決策樹的主要缺點之一是其通常不是最準確的算法。部分是由于決策樹是高方差算法,這意味著訓(xùn)練數(shù)據(jù)中的不同分裂可能導(dǎo)致樹的差異大相徑庭。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PYTHON用決策樹分類預(yù)測糖尿病和可視化實例
使用Python中從頭開始構(gòu)建決策樹算法
scikit-learn決策樹算法類庫使用小結(jié)
決策樹的高級概述
一文帶你讀懂機器學(xué)習(xí)和數(shù)據(jù)科學(xué)的決策樹
入門|機器學(xué)習(xí)第一課:決策樹學(xué)習(xí)概述與實現(xiàn)
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服