最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實現(xiàn)決策樹分類算法

 更新時間:2017年12月21日 15:40:23   作者:ahu-lichang  
這篇文章主要為大家詳細介紹了python實現(xiàn)決策樹分類算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python實現(xiàn)決策樹分類算法的具體代碼,供大家參考,具體內(nèi)容如下

1、概述

決策樹(decision tree)——是一種被廣泛使用的分類算法。

相比貝葉斯算法,決策樹的優(yōu)勢在于構(gòu)造過程不需要任何領(lǐng)域知識或參數(shù)設(shè)置

在實際應用中,對于探測式的知識發(fā)現(xiàn),決策樹更加適用。

2、算法思想

通俗來說,決策樹分類的思想類似于找對象?,F(xiàn)想象一個女孩的母親要給這個女孩介紹男朋友,于是有了下面的對話:

      女兒:多大年紀了?

      母親:26。

      女兒:長的帥不帥?

      母親:挺帥的。

      女兒:收入高不?

      母親:不算很高,中等情況。

      女兒:是公務(wù)員不?

      母親:是,在稅務(wù)局上班呢。

      女兒:那好,我去見見。 

這個女孩的決策過程就是典型的分類樹決策。

實質(zhì):通過年齡、長相、收入和是否公務(wù)員對將男人分為兩個類別:見和不見

假設(shè)這個女孩對男人的要求是:30歲以下、長相中等以上并且是高收入者或中等以上收入的公務(wù)員,那么這個可以用下圖表示女孩的決策邏輯

上圖完整表達了這個女孩決定是否見一個約會對象的策略,其中:

◊綠色節(jié)點表示判斷條件

◊橙色節(jié)點表示決策結(jié)果

◊箭頭表示在一個判斷條件在不同情況下的決策路徑

圖中紅色箭頭表示了上面例子中女孩的決策過程。 

這幅圖基本可以算是一顆決策樹,說它“基本可以算”是因為圖中的判定條件沒有量化,如收入高中低等等,還不能算是嚴格意義上的決策樹,如果將所有條件量化,則就變成真正的決策樹了。 

決策樹分類算法的關(guān)鍵就是根據(jù)“先驗數(shù)據(jù)”構(gòu)造一棵最佳的決策樹,用以預測未知數(shù)據(jù)的類別 

決策樹:是一個樹結(jié)構(gòu)(可以是二叉樹或非二叉樹)。其每個非葉節(jié)點表示一個特征屬性上的測試,每個分支代表這個特征屬性在某個值域上的輸出,而每個葉節(jié)點存放一個類別。使用決策樹進行決策的過程就是從根節(jié)點開始,測試待分類項中相應的特征屬性,并按照其值選擇輸出分支,直到到達葉子節(jié)點,將葉子節(jié)點存放的類別作為決策結(jié)果。

3、決策樹構(gòu)造

假如有以下判斷蘋果好壞的數(shù)據(jù)樣本:

樣本    紅     大      好蘋果

0         1      1         1

1         1      0         1

2         0      1         0

3         0      0         0

樣本中有2個屬性,A0表示是否紅蘋果。A1表示是否大蘋果。假如要根據(jù)這個數(shù)據(jù)樣本構(gòu)建一棵自動判斷蘋果好壞的決策樹。

由于本例中的數(shù)據(jù)只有2個屬性,因此,我們可以窮舉所有可能構(gòu)造出來的決策樹,就2棵,如下圖所示:

顯然左邊先使用A0(紅色)做劃分依據(jù)的決策樹要優(yōu)于右邊用A1(大?。┳鰟澐忠罁?jù)的決策樹。

當然這是直覺的認知。而直覺顯然不適合轉(zhuǎn)化成程序的實現(xiàn),所以需要有一種定量的考察來評價這兩棵樹的性能好壞。

決策樹的評價所用的定量考察方法為計算每種劃分情況的信息熵增益

如果經(jīng)過某個選定的屬性進行數(shù)據(jù)劃分后的信息熵下降最多,則這個劃分屬性是最優(yōu)選擇 

屬性劃分選擇(即構(gòu)造決策樹)的依據(jù):

簡單來說,熵就是“無序,混亂”的程度。

通過計算來理解:

1、原始樣本數(shù)據(jù)的熵:

樣例總數(shù):4

好蘋果:2

壞蘋果:2

熵: -(1/2 * log(1/2) + 1/2 * log(1/2)) = 1

信息熵為1表示當前處于最混亂,最無序的狀態(tài)。

2、兩顆決策樹的劃分結(jié)果熵增益計算

樹1先選A0作劃分,各子節(jié)點信息熵計算如下:

0,1葉子節(jié)點有2個正例,0個負例。信息熵為:e1 = -(2/2 * log(2/2) + 0/2 * log(0/2)) = 0。

2,3葉子節(jié)點有0個正例,2個負例。信息熵為:e2 = -(0/2 * log(0/2) + 2/2 * log(2/2)) = 0。

因此選擇A0劃分后的信息熵為每個子節(jié)點的信息熵所占比重的加權(quán)和:E = e1*2/4 + e2*2/4 = 0。

選擇A0做劃分的信息熵增益G(S, A0)=S - E = 1 - 0 = 1.

事實上,決策樹葉子節(jié)點表示已經(jīng)都屬于相同類別,因此信息熵一定為0。 

樹2先選A1作劃分,各子節(jié)點信息熵計算如下:

0,2子節(jié)點有1個正例,1個負例。信息熵為:e1 = -(1/2 * log(1/2) + 1/2 * log(1/2)) = 1。

1,3子節(jié)點有1個正例,1個負例。信息熵為:e2 = -(1/2 * log(1/2) + 1/2 * log(1/2)) = 1。

因此選擇A1劃分后的信息熵為每個子節(jié)點的信息熵所占比重的加權(quán)和:E = e1*2/4 + e2*2/4 = 1。也就是說分了跟沒分一樣!

選擇A1做劃分的信息熵增益G(S, A1)=S - E = 1 - 1 = 0. 

因此,每次劃分之前,我們只需要計算出信息熵增益最大的那種劃分即可。

先做A0劃分時的信息熵增益為1>先做A1劃分時的信息熵增益,所以先做A0劃分是最優(yōu)選擇?。。?/u>

4、算法指導思想

經(jīng)過決策屬性的劃分后,數(shù)據(jù)的無序度越來越低,也就是信息熵越來越小 

5、算法實現(xiàn)

梳理出數(shù)據(jù)中的屬性

比較按照某特定屬性劃分后的數(shù)據(jù)的信息熵增益,選擇信息熵增益最大的那個屬性作為第一劃分依據(jù),然后繼續(xù)選擇第二屬性,以此類推

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實現(xiàn)封裝得到virustotal掃描結(jié)果

    python實現(xiàn)封裝得到virustotal掃描結(jié)果

    這篇文章主要介紹了python實現(xiàn)封裝得到virustotal掃描結(jié)果的方法,是比較實用的技巧,可將掃描結(jié)果寫入數(shù)據(jù)庫,需要的朋友可以參考下
    2014-10-10
  • Scrapy基于Python構(gòu)建強大網(wǎng)絡(luò)爬蟲框架實例探究

    Scrapy基于Python構(gòu)建強大網(wǎng)絡(luò)爬蟲框架實例探究

    這篇文章主要為大家介紹了Scrapy基于Python構(gòu)建強大網(wǎng)絡(luò)爬蟲框架實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • flask框架自定義url轉(zhuǎn)換器操作詳解

    flask框架自定義url轉(zhuǎn)換器操作詳解

    這篇文章主要介紹了flask框架自定義url轉(zhuǎn)換器操作,結(jié)合實例形式分析了URL轉(zhuǎn)換器的相關(guān)原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • python轉(zhuǎn)換pkl模型文件為txt文件問題

    python轉(zhuǎn)換pkl模型文件為txt文件問題

    這篇文章主要介紹了python轉(zhuǎn)換pkl模型文件為txt文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python腳本使用阿里云slb對惡意攻擊進行封堵的實現(xiàn)

    python腳本使用阿里云slb對惡意攻擊進行封堵的實現(xiàn)

    這篇文章主要介紹了python腳本使用阿里云slb對惡意攻擊進行封堵的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 詳解Python中contextlib上下文管理模塊的用法

    詳解Python中contextlib上下文管理模塊的用法

    Python中一些內(nèi)建對象有了上下文管理器的支持,于是可以使用with語句來實現(xiàn)自動的文件打開關(guān)閉以及線程操作等,這里我們就從根基上來詳解Python中contextlib上下文管理模塊的用法
    2016-06-06
  • 詳解Python requests模塊

    詳解Python requests模塊

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著Python requests模塊展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python基礎(chǔ)之標準庫和常用的第三方庫案例教程

    Python基礎(chǔ)之標準庫和常用的第三方庫案例教程

    這篇文章主要介紹了Python基礎(chǔ)之標準庫和常用的第三方庫案例教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • python?json-rpc?規(guī)范源碼閱讀

    python?json-rpc?規(guī)范源碼閱讀

    這篇文章主要為大家介紹了python?json-rpc?規(guī)范的源碼閱讀,以及jsonrpcclient與jsonrpcserver的實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Python SQLite3簡介

    Python SQLite3簡介

    這篇文章主要為大家詳細介紹了Python SQLite3的簡單介紹以及使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評論

日喀则市| 同心县| 仁化县| 金川县| 洛阳市| 隆德县| 正镶白旗| 榆林市| 侯马市| 德惠市| 唐河县| 玉树县| 屏东县| 万全县| 海林市| 晋中市| 贵德县| 曲周县| 渭南市| 青神县| 龙南县| 明水县| 长丰县| 伊春市| 和静县| 合江县| 秭归县| 桦甸市| 永寿县| 信阳市| 深州市| 揭阳市| 中阳县| 铜梁县| 阳谷县| 古交市| 蒲江县| 桦川县| 敦煌市| 绥江县| 临西县|