欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

(八)Python 中的 AdaBoost 分類器實例

系統 2979 0

作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai


(一)機器學習中的集成學習入門

(二)bagging 方法

(三)使用Python進行交易的隨機森林算法

(四)Python中隨機森林的實現與解釋

(五)如何用 Python 從頭開始實現 Bagging 算法

(六)如何利用Python從頭開始實現隨機森林算法

(七)AdaBoost 簡介

(八)Python 中的 AdaBoost 分類器實例


boosting 算法背后的思路是按照順序訓練預測模型,每個模型都試圖去糾正前面的錯誤。兩種最常見的模型就是AdaBoost 和 Gradient Boosting。在上一篇文章中,我們已經介紹了 AdaBoost 。從較高的層面上看,AdaBoost 類似于隨機森林,因為它們都統計了森林中每個決策樹所做的預測,從而來決定最終的分類。但是,它們之間肯定有一些微妙的差異。例如,在 AdaBoost 中,決策樹的深度為 1。此外,每個決策樹做出的預測對模型的最終預測產生不同的影響。

算法

在前面的實例中,我們將使用一個數據集,給定一些人的特征,來判斷這個人是不是受歡迎。

weight smart polite fit attractive
180 no no no no
150 yes Yes no no
175 yes Yes yes yes
165 Yes yes yes yes
190 no yes No no
201 yes yes yes yes
185 yes yes no yes
168 Yes No Yes yes

Step 1:初始化樣本權重

在 AdaBoost 的第一步中,每個樣本都與一個權重相關聯,該權重表明它在分類方面的重要性。最初,所有樣本具有想聽的權重。(1除以樣本總數, 1 / N 1/N 1 / N

weight smart polite fit attractive Sample weight
180 no no no no 1/8
150 yes Yes no no 1/8
175 yes Yes yes yes 1/8
165 Yes yes yes yes 1/8
190 no yes No no 1/8
201 yes yes yes yes 1/8
185 yes yes no yes 1/8
168 Yes No Yes yes 1/8

Step 2:使用每個特征去構建決策樹,對數據進行分類并評估結果

接下來,對于每個特征,我們構建一個深度為 1 的決策樹。然后,我們使用每個決策樹對數據進行分類。然后,我們將每棵樹的預測與訓練集中的實際標簽進行比較。我們對訓練樣本中得到最好的結果的特征和樹模型使其成為森林中的下一課樹。

例如,假設我們建造了一棵樹,如果人 smart = yes,那么我們就認為這個人具有吸引力。如果人 smart = no,那么我們就認為這個人沒有吸引力。

(八)Python 中的 AdaBoost 分類器實例_第1張圖片

根據他們是否 smart 進行分類,決策樹錯誤的將一個人計算錯誤了。將一個 smart = yes 的人歸納為吸引,但真實情況是不吸引。

Step 3:計算最終分類中樹的重要性

一旦我們決定了決策樹。我們使用前面的公式來計算它在最終分類中的權重

s i g n i f i c a n c e = 1 2 l o g ( 1 ? t o t a l e r r o r t o t a l e r r o r ) significance = \frac{1}{2}log(\frac{1-totalerror}{totalerror}) s i g n i f i c a n c e = 2 1 ? l o g ( t o t a l e r r o r 1 ? t o t a l e r r o r ? )

totalerror 是錯誤分類的樣本的權重之和。回到我們的例子,total error 應該等于如下:

t o t a l e r r o r = s u m o f w e i g h t s f o r i n c o r r e c t l y c l a s s i f i e d s a m p l e s = 1 8 ? 1 = 1 8 total error = sum of weights for incorrectly classified samples= \frac{1}{8} * 1 = \frac{1}{8} t o t a l e r r o r = s u m o f w e i g h t s f o r i n c o r r e c t l y c l a s s i f i e d s a m p l e s = 8 1 ? ? 1 = 8 1 ?

我們將 totalerror 參數插入到我們的公式中,我們得到:

s i g n i f i c a n c e = 1 2 l o g ( 1 ? 1 8 1 8 ) = 0.97 significance = \frac{1}{2} log(\frac{1-\frac{1}{8}}{\frac{1}{8}}) = 0.97 s i g n i f i c a n c e = 2 1 ? l o g ( 8 1 ? 1 ? 8 1 ? ? ) = 0 . 9 7

正如我們稍后將看到的,這個數字用于后續(xù)的權重更新。

Step 4:更新樣本權重,以便下一個決策樹將上一個決策樹所產生的錯誤考慮在內

我們查看當前樹分類不正確的樣本,并使用以下公式增加其相關權重。

n e w s a m p l e w e i g h t = s a m p l e w e i g h t ? e x p ( s i g n i f i c a n c e ) newsampleweight=sampleweight * exp(significance) n e w s a m p l e w e i g h t = s a m p l e w e i g h t ? e x p ( s i g n i f i c a n c e )

這里沒有什么花哨的東西,我們使用 e 來提高權重,是因為我們希望新的樣本權重呈現指數增長。

n e w s a m p l e w e i g h t = 1 8 ? e x p ( 0.97 ) = 1 8 ? 2.64 = 0.33 newsampleweight=\frac{1}{8} * exp(0.97) = \frac{1}{8} * 2.64 = 0.33 n e w s a m p l e w e i g h t = 8 1 ? ? e x p ( 0 . 9 7 ) = 8 1 ? ? 2 . 6 4 = 0 . 3 3

然后,我們使用以下公式查看樹正確分類的樣本,并且降低其相關權重。

n e w s a m p l e w e i g h t = s a m p l e w e i g h t ? e x p ( ? s i g n i f i c a n c e ) newsampleweight=sampleweight * exp(- significance) n e w s a m p l e w e i g h t = s a m p l e w e i g h t ? e x p ( ? s i g n i f i c a n c e )

該方程跟此前的方程式相同,我們只是將 e 提高到負指數。

n e w s a m p l e w e i g h t = 1 8 ? e x p ( ? 0.97 ) = 1 8 ? 0.38 = 0.05 newsampleweight=\frac{1}{8} * exp(-0.97) = \frac{1}{8} * 0.38 = 0.05 n e w s a m p l e w e i g h t = 8 1 ? ? e x p ( ? 0 . 9 7 ) = 8 1 ? ? 0 . 3 8 = 0 . 0 5

這里的主要內容是,前一個樹樁錯誤分類的樣本應該與較大的樣本權重相關聯,并且正確分類的樣本應該與較小的樣本權重相關聯。

注意,如果我們將所有樣本權重加起來,我們得到的是一個小于 1 的數字。因此,我們將新樣本權重標準化,使得他們加起來為 1 。

weight smart polite fit attractive Sample weight new weight normalized weight
180 no no no no 1/8 0.05 0.07
150 yes Yes no no 1/8 0.33 0.49
175 yes Yes yes yes 1/8 0.05 0.07
165 Yes yes yes yes 1/8 0.05 0.07
190 no yes No no 1/8 0.05 0.07
201 yes yes yes yes 1/8 0.05 0.07
185 yes yes no yes 1/8 0.05 0.07
168 Yes No Yes yes 1/8 0.05 0.07

Step 5:形成一個新的數據集

我們首先創(chuàng)建的一個與原始數據集大小相同的新數據集。然后,想象一下輪盤賭桌,其中每個口袋對應一個樣本權重。我們隨機選擇 0 到 1 之間的數字。每個數字落在的位置決定了我們在新的數據集中放置的樣本。

(八)Python 中的 AdaBoost 分類器實例_第2張圖片

由于錯誤分類的樣本相對于其他樣本具有更高的權重,因此隨機數落在其分布的切片下的可能性更大。因此,新數據集將傾向于包含由前一樹錯誤分類的樣本的多個副本。因此,當我們回到評估每個決策樹所做預測的步驟時,得分最高的那個將正確的分類前一個樹被錯誤分類的樣本。

Step 6:重復步驟 2 到 5,直到迭代次數等于超參數指定的數量(即估計量的數量)

Step 7:使用決策樹林來預測訓練集之外的數據

AdaBoost 模型通過讓森林中的每棵樹對樣本進行分類來進行預測。然后,我們根據它們的決定將樹分成幾組。對于每個組,我們將組內每棵樹的重要性加起來。森林作為一個整體進行的最終分類由綜合最大的群體決定。

(八)Python 中的 AdaBoost 分類器實例_第3張圖片

代碼

讓我們看看如何在 Python 中實現 AdaBoost 。首先,我們導入以下庫。

            
              
                from
              
               sklearn
              
                .
              
              ensemble 
              
                import
              
               AdaBoostClassifier

              
                from
              
               sklearn
              
                .
              
              tree 
              
                import
              
               DecisionTreeClassifier

              
                from
              
               sklearn
              
                .
              
              datasets 
              
                import
              
               load_breast_cancer

              
                import
              
               pandas 
              
                as
              
               pd

              
                import
              
               numpy 
              
                as
              
               np

              
                from
              
               sklearn
              
                .
              
              model_selection 
              
                import
              
               train_test_split

              
                from
              
               sklearn
              
                .
              
              metrics 
              
                import
              
               confusion_matrix

              
                from
              
               sklearn
              
                .
              
              preprocessing 
              
                import
              
               LabelEncoder

            
          

在這個例子中,我們將使用 AdaBoost 將腫瘤歸類為惡性或者良性腫瘤。我們使用 scikit-learn API 將數據集導入到我們的程序中。

            
              breast_cancer 
              
                =
              
               load_breast_cancer
              
                (
              
              
                )
              
              
X 
              
                =
              
               pd
              
                .
              
              DataFrame
              
                (
              
              breast_cancer
              
                .
              
              data
              
                ,
              
               columns
              
                =
              
              breast_cancer
              
                .
              
              feature_names
              
                )
              
              
y 
              
                =
              
               pd
              
                .
              
              Categorical
              
                .
              
              from_codes
              
                (
              
              breast_cancer
              
                .
              
              target
              
                ,
              
               breast_cancer
              
                .
              
              target_names
              
                )
              
            
          

每當我們使用分類功能時,我們必須將其編碼為數字。對于這個問題,我們將惡性設置為 1 ,并將良性設置為 0 。

            
              encoder 
              
                =
              
               LabelEncoder
              
                (
              
              
                )
              
              
binary_encoded_y 
              
                =
              
               pd
              
                .
              
              Series
              
                (
              
              encoder
              
                .
              
              fit_transform
              
                (
              
              y
              
                )
              
              
                )
              
            
          

我們將數據分為訓練集和測試集,來評估我們的模型。

            
              train_X
              
                ,
              
               test_X
              
                ,
              
               train_y
              
                ,
              
               test_y 
              
                =
              
               train_test_split
              
                (
              
              X
              
                ,
              
               binary_encoded_y
              
                ,
              
               random_state
              
                =
              
              
                1
              
              
                )
              
            
          

接下來,我們構建并將我們的模型擬合到訓練集。max_depth = 1 用于告訴我們的模型我們希望我們的森林中單顆樹的只有一個節(jié)點。n_estimators 用于制定樹林中樹的總數。

            
              classifier 
              
                =
              
               AdaBoostClassifier
              
                (
              
              
    DecisionTreeClassifier
              
                (
              
              max_depth
              
                =
              
              
                1
              
              
                )
              
              
                ,
              
              
    n_estimators
              
                =
              
              
                200
              
              
                )
              
              
classifier
              
                .
              
              fit
              
                (
              
              train_X
              
                ,
              
               train_y
              
                )
              
            
          

我們使用我們的模型來預測腫瘤是否惡性的或者良性的。

            
              predictions 
              
                =
              
               classifier
              
                .
              
              predict
              
                (
              
              test_X
              
                )
              
            
          

最后,我們使用混淆矩陣評估模型。該模型產生了 2 個誤報和 3 個假陰性。

            
              confusion_matrix
              
                (
              
              test_y
              
                ,
              
               predictions
              
                )
              
            
          

輸出結果為:

[[86, 2], [3, 52]]

最后

與隨機森林一樣,AdaBoost 通過對每個樣本應用多個決策樹并組合各個樹的預測來進行預測。然而,在 AdaBoost 算法中,不是采用森林中每個決策樹所作出的預測的平均值,而是每個決策樹對最終預測貢獻的不同的量


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本一区二区三区高清不卡 | 成人人观看的免费毛片 | 欧美一区二区三区在线视频 | 2018中文字幕在线 | 很黄很暴力深夜爽爽无遮挡 | 亚洲国产综合精品 | 欧美激情一区二区三级高清视频 | 九九热精品视频在线播放 | 精品在线视频一区 | 国产成人自拍一区 | 黄色片的网站 | 亚洲欧美无人区乱码 | 久久精品二区 | 中文字幕一区二区精品区 | 丝袜美腿中文字幕 | 日本女人下面毛茸茸 | 精品久久久久久无码中文字幕 | 啪啪网免费 | 免费观看一级特黄欧美大片 | 精品视频免费观看 | 亚洲人成一区二区三区 | 亚洲第一网站 | 国产熟妇无码A片AAA毛片视频 | 波多野结衣在线网址 | 日本高清色视频在线观看免费 | 久久精品综合电影 | 亚洲精品一区中文字幕乱码 | 久久久久久国产精品视频 | 免费av电影网站 | 日韩精品www | 懂色中文一区二区三区在线视频 | 极品狂兵电视剧免费观看 | 久久综合九色综合欧美狠狠 | 亚洲日本人成中文字幕 | 另类视频在线观看 | a级在线观看 | 亚洲精品美女久久久久 | 国内自拍视频在线看免费观看 | 在线中文字幕视频 | 久草小视频 | 先锋资源中文字幕 |