C4.5

C4.5是機器學習算法中的另一個分類決策樹算法,它是基于ID3算法進行改進后的一種重要算法,相比于ID3算法,改進有如下幾個要點:

  • 用信息增益率來選擇屬性。ID3選擇屬性用的是子樹的信息增益,這里可以用很多方法來定義信息,ID3使用的是熵(entropy, 熵是一種不純度度量準則),也就是熵的變化值,而C4.5用的是信息增益率。
  • 在決策樹構造過程中進行剪枝,因為某些具有很少元素的結點可能會使構造的決策樹過適應(Overfitting),如果不考慮這些結點可能會更好。
  • 對非離散數據也能處理。
  • 能夠對不完整數據進行處理。

首先,說明一下如何計算信息增益率。
熟悉了ID3算法后,已經知道如何計算信息增益,計算公式如下所示(來自Wikipedia):
info-gain
或者,用另一個更加直觀容易理解的公式計算:

  • 按照類標簽對訓練數據集D的屬性集A進行劃分,得到信息熵:

info

  • 按照屬性集A中每個屬性進行劃分,得到一組信息熵:

infoA

  • 計算信息增益

然后計算信息增益,即前者對后者做差,得到屬性集合A一組信息增益:
gain
這樣,信息增益就計算出來了。

  • 計算信息增益率

下面看,計算信息增益率的公式,如下所示(來自Wikipedia):
IGR
其中,IG表示信息增益,按照前面我們描述的過程來計算。而IV是我們現在需要計算的,它是一個用來考慮分裂信息的度量,分裂信息用來衡量屬性分 裂數據的廣度和均勻程序,計算公式如下所示(來自Wikipedia):
IV
簡化一下,看下面這個公式更加直觀:
H(V)
其中,V表示屬性集合A中的一個屬性的全部取值。

我們以一個很典型被引用過多次的訓練數據集D為例,來說明C4.5算法如何計算信息增益并選擇決策結點。

上面的訓練集有4個屬性,即屬性集合A={OUTLOOK, TEMPERATURE, HUMIDITY, WINDY};而類標簽有2個,即類標簽集合C={Yes, No},分別表示適合戶外運動和不適合戶外運動,其實是一個二分類問題。
我們已經計算過信息增益,這里直接列出來,如下所示:
數據集D包含14個訓練樣本,其中屬于類別“Yes”的有9個,屬于類別“No”的有5個,則計算其信息熵:

1 Info(D) = -9/14 * log2(9/14) - 5/14 * log2(5/14) = 0.940

下面對屬性集中每個屬性分別計算信息熵,如下所示:

1 Info(OUTLOOK) = 5/14 * [- 2/5 * log2(2/5) – 3/5 * log2(3/5)] + 4/14 * [ - 4/4 * log2(4/4) - 0/4 * log2(0/4)] + 5/14 * [ - 3/5 * log2(3/5) – 2/5 * log2(2/5)] = 0.694
2 Info(TEMPERATURE) = 4/14 * [- 2/4 * log2(2/4) – 2/4 * log2(2/4)] + 6/14 * [ - 4/6 * log2(4/6) - 2/6 * log2(2/6)] + 4/14 * [ - 3/4 * log2(3/4) – 1/4 * log2(1/4)] = 0.911
3 Info(HUMIDITY) = 7/14 * [- 3/7 * log2(3/7) – 4/7 * log2(4/7)] + 7/14 * [ - 6/7 * log2(6/7) - 1/7 * log2(1/7)] = 0.789
4 Info(WINDY) = 6/14 * [- 3/6 * log2(3/6) – 3/6 * log2(3/6)] + 8/14 * [ - 6/8 * log2(6/8) - 2/8 * log2(2/8)] = 0.892

根據上面的數據,我們可以計算選擇第一個根結點所依賴的信息增益值,計算如下所示:

1 Gain(OUTLOOK) = Info(D) - Info(OUTLOOK) = 0.940 - 0.694 = 0.246
2 Gain(TEMPERATURE) = Info(D) - Info(TEMPERATURE) = 0.940 - 0.911 = 0.029
3 Gain(HUMIDITY) = Info(D) - Info(HUMIDITY) = 0.940 - 0.789 = 0.151
4 Gain(WINDY) = Info(D) - Info(WINDY) = 0.940 - 0.892 = 0.048

接下來,我們計算分裂信息度量H(V):

  • OUTLOOK屬性

屬性OUTLOOK有3個取值,其中Sunny有5個樣本、Rainy有5個樣本、Overcast有4個樣本,則

1 H(OUTLOOK) = - 5/14 * log2(5/14) - 5/14 * log2(5/14) - 4/14 * log2(4/14) = 1.577406282852345
  • TEMPERATURE屬性

屬性TEMPERATURE有3個取值,其中Hot有4個樣本、Mild有6個樣本、Cool有4個樣本,則

1 H(TEMPERATURE) = - 4/14 * log2(4/14) - 6/14 * log2(6/14) - 4/14 * log2(4/14) = 1.5566567074628228
  • HUMIDITY屬性

屬性HUMIDITY有2個取值,其中Normal有7個樣本、High有7個樣本,則

1 H(HUMIDITY) = - 7/14 * log2(7/14) - 7/14 * log2(7/14) = 1.0
  • WINDY屬性

屬性WINDY有2個取值,其中True有6個樣本、False有8個樣本,則

1 H(WINDY) = - 6/14 * log2(6/14) - 8/14 * log2(8/14) = 0.9852281360342516

根據上面計算結果,我們可以計算信息增益率,如下所示:

1 IGR(OUTLOOK) = Info(OUTLOOK) / H(OUTLOOK) = 0.246/1.577406282852345 = 0.15595221261270145
2 IGR(TEMPERATURE) = Info(TEMPERATURE) / H(TEMPERATURE) = 0.029 / 1.5566567074628228 = 0.018629669509642094
3 IGR(HUMIDITY) = Info(HUMIDITY) / H(HUMIDITY) = 0.151/1.0 = 0.151
4 IGR(WINDY) = Info(WINDY) / H(WINDY) = 0.048/0.9852281360342516 = 0.048719680492692784

根據計算得到的信息增益率進行選擇屬性集中的屬性作為決策樹結點,對該結點進行分裂。

C4.5算法的優點是:產生的分類規則易于理解,準確率較高。
C4.5算法的缺點是:在構造樹的過程中,需要對數據集進行多次的順序掃描和排序,因而導致算法的低效。

參考鏈接

  • http://blog.sina.com.cn/s/blog_68ffc7a40100urn3.html
  • http://en.wikipedia.org/wiki/Information_gain_ratio
  • http://blog.sina.com.cn/s/blog_54c5622701016h4j.html
  • http://en.wikipedia.org/wiki/Information_gain_ratio
  • http://baike.baidu.com/view/8775136.htm
  • http://www.cnblogs.com/zhangchaoyang/articles/2842490.html
  • http://private.codecogs.com/latex/eqneditor.php

quote:http://shiyanjun.cn/archives/428.html
C

轉載于:https://www.cnblogs.com/fillim/p/4277022.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257649.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(周日賽)Sort the Array

題意:一段數字,逆置其中兩個使其遞增 DescriptionBeing a programmer, you like arrays a lot. For your birthday, your friends have given you an array a consisting of ndistinct integers. Unfortunately, the size of a is too small. You want a…

jqgrid學習(三)

1.修改jqgrid自帶的行編輯按鈕樣式 //jqgrid默認的行編輯樣式 {name : ,index : ,width : 70,fixed : true,sortable : false,resize : false,formatter : actions,},//修改每行的編輯按鈕圖標為目標樣式//當表格中數據加載完畢后,執行此方法 loadComplete : functi…

事件Event對象

事件event對象 當事件發生時,會向調用函數傳遞一個event對象,event對象記錄當前事件發生時的環境信息。 一個事件只能對應一個event對象,并且event對象是短暫存在的。 DOM中的event對象的使用方法 1、在HTML標記中,通過事件來調用…

解決mac osx下pip安裝ipython權限的問題

1pip install ipython --user -U下面是pip install gevent的錯誤提示, 又是 Operation not permitted … 12345#xiaorui.ccpip install gevent...raise Error, errorsError: [(/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_marker…

談談分布式事務之三: System.Transactions事務詳解[下篇]

在前面一篇給出的Transaction的定義中,信息的讀者應該看到了一個叫做DepedentClone的方法。該方法對用于創建基于現有Transaction對 象的“依賴事務(DependentTransaction)”。不像可提交事務是一個獨立的事務對象,依賴事務依附于…

HDU——2444 The Accomodation of Students

The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)                    Total Submission(s): 7086 Accepted Submission(s): 3167 Problem DescriptionThere are a group of studen…

iOS開發系列--觸摸事件、手勢識別、搖晃事件、耳機線控

-- iOS事件全面解析 概覽 iPhone的成功很大一部分得益于它多點觸摸的強大功能,喬布斯讓人們認識到手機其實是可以不用按鍵和手寫筆直接操作的,這不愧為一項偉大的設計。今天我們就針對iOS的觸摸事件(手勢操作)、運動事件、遠程控制…

關于Hyper-V備份的四大注意事項

盡管Hyper-V備份相對簡單,但備份管理員仍需注意四大問題。這四方面的問題在創建備份時可能不太重要,但在備份恢復時影響甚大。 1、對于虛擬機來說不僅意味著虛擬磁盤 就目前來看,企業在執行Hyper-V備份時最常見的誤區就是把虛擬機當做物理服務…

python為什么忽然火了_為什么Python突然就火了起來了呢?

近日,TIOBE發布10月編程語言排行榜顯示,15年來TIOBE指數的前8名一直保持不變,而Python正在成為一種新的大型語言。越來越多的企業在使用Python進行開發,越來越多的人正在加入Python程序員行列!TIOBE 10月編程語言排行榜前20名Pyth…

SQL 2005 全文索引

全文索引技術是目前搜索引擎的關鍵技術。 試想在1M大小的文件中搜索一個詞,可能需要幾秒,在100M的文件中可能需要幾十秒,如果在更大的文件中搜索那么就需要更大的系統開銷,這樣的開銷是不現實的。 所以在這樣的矛盾下出現了全文索…

python重命名窗口_Python:即時重命名方法名稱

如果要繼續在已切換到使用屬性的對象上使用get_Field和set_Field(您只需訪問或分配給Field),則可以使用包裝器對象:class NoPropertyAdaptor(object):def __init__(self, obj):self.obj objdef __getattr__(self, name):if name.startswith("get_"):retu…

nginx優化之請求直接返回json數據

對于有些服務端接口返回是固定值的json,可通過配置nginx直接返回json,減少程序的加載對資源的占用,減少接口響應時間 location ~* (request/update)$ { default_type application/json; return 200 {"update":"no&quo…

ARP掃描工具arp-scan

2019獨角獸企業重金招聘Python工程師標準>>> ARP掃描工具arp-scan arp-scan是Kali Linux自帶的一款ARP掃描工具。該工具可以進行單一目標掃描,也可以進行批量掃描。批量掃描的時候,用戶可以通過CIDR、地址范圍或者列表文件的方式指定。該工具…

數據庫索引的作用和優點缺點

為什么要創建索引呢?這是因為,創建索引可以大大提高系統的性能。 第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。 第二,可以大大加快 數據的檢索速度,這也是創建索引的最主要的原因。 第…

elementui el-from 怎樣顯示圖片_vue2.0使用weui.js的uploader組件上傳圖片(兼容移動端)...

本文已同步到專業技術網站 www.sufaith.com, 該網站專注于前后端開發技術與經驗分享, 包含Web開發、Nodejs、Python、Linux、IT資訊等板塊.最近在使用 vue2.0開發微信公眾號網頁 其中涉及到 選擇圖片, 圖片的壓縮上傳, 預覽, 刪除等操作。項目整體UI框架使用的是 vux, 但可惜的…

面向對象分析

在需求獲取階段,開發人員關注于理解用戶以及他們的使用要求。而在需求分析階段,開發人員關注于理解系統需要構建的內容,其核心是產生一個準確的、完整的、一致的和可驗證的系統模型,稱為分析模型。 面對對象的分析模型由三個獨立的…

python字典輸入學生信息_如何用Python將XML中的所有信息輸入字典

我通常使用標準庫中的ElementTree模塊解析XML。它沒有給你一個字典,你得到了一個更有用的DOM結構,它允許你為孩子們遍歷每個元素。from xml.etree import ElementTree as ETxml ET.parse("root_element xml.getroot()for child in root_element:.…

HDU4267(2012年長春站)

這道題真的是好題,讓我對線段樹有了全新的認識,至少讓我真正感受到了線段樹的神奇。 題意是就是線段樹區間更新,單點詢問的問題,不過這個題好就好在它的區間更新的點并不連續! adding c to each of Ai which satisfies…

ITFriend創業敗局(四):菜鳥CEO的自我修養

自創業自封CEO以來,短短3個月,又經歷了無數的磨練,快速成長中。創業不同于打工,他要求你必須有全局觀和綜合能力,技術、市場、商務,啥都得會,還要處理各種各樣的問題和矛盾。根據個人經歷&#…

51nod 1050 循環數組最大子段和

1050 循環數組最大子段和 N個整數組成的循環序列a[1],a[2],a[3],…,a[n],求該序列如a[i]a[i1]…a[j]的連續的子段和的最大值(循環序列是指n個數圍成一個圈,因此需要考慮a[n-1],a[n],a[1],a[2]這樣的序列)。當所給的整數均為負數時…