99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)挖掘十大算法之決策樹詳解(2)
數(shù)據(jù)挖掘十大算法之決策樹詳解(2)
2017-03-17
收藏

數(shù)據(jù)挖掘十大算法之決策樹詳解(2)

ID3算法

ID3和C4.5都是由澳大利亞計(jì)算機(jī)科學(xué)家Ross Quinlan開發(fā)的決策樹構(gòu)建算法,其中C4.5是在ID3上發(fā)展而來的。

ID3算法的核心是在決策樹各個(gè)結(jié)點(diǎn)上應(yīng)用信息增益準(zhǔn)則選擇特征,遞歸地構(gòu)建決策樹。具體方法是:從根結(jié)點(diǎn)(root node)開始,對(duì)結(jié)點(diǎn)計(jì)算所有可能的特征的信息增益,選擇信息增益最大的特征作為結(jié)點(diǎn)的特征,由該特征的不同取值建立子結(jié)點(diǎn);再對(duì)子結(jié)點(diǎn)遞歸地調(diào)用以上方法,構(gòu)建決策樹;直到所有特征的信息增益均很小或沒有特征可以選擇為止。最后得到一棵決策樹。ID3相當(dāng)于用極大似然法進(jìn)行概率模型的選擇。 下面我們給出一個(gè)更加正式的ID3算法的描述:

輸入:訓(xùn)練數(shù)據(jù)集D,特征集A,閾值?; 
輸出:決策樹T。

若D中所有實(shí)例屬于同一類Ck,則T為單結(jié)點(diǎn)樹,并將類Ck作為該結(jié)點(diǎn)的類標(biāo)記,返回T;

若A=?,則T為單結(jié)點(diǎn)樹,并將D中實(shí)例數(shù)最大的類Ck作為該結(jié)點(diǎn)的類標(biāo)記,返回T;

否則,計(jì)算A中各特征對(duì)D的信息增益,選擇信息增益最大的特征Ag;

(1) 如果Ag的信息增益小于閾值?,則置T為單結(jié)點(diǎn)樹,并將D中實(shí)例數(shù)最大的類Ck作為該結(jié)點(diǎn)的類標(biāo)記,返回T;

(2) 否則,對(duì)Ag的每一可能值ai,依Ag=ai將D分割為若干非空子集Di,將Di中實(shí)例數(shù)最大的類作為標(biāo)記,構(gòu)建子結(jié)點(diǎn),由結(jié)點(diǎn)及其子結(jié)點(diǎn)構(gòu)成樹T,返回T;

對(duì)第i個(gè)子結(jié)點(diǎn),以Di為訓(xùn)練集,以A?{Ag}為特征集,遞歸地調(diào)用步驟(1)~(3),得到子樹Ti,返回Ti。

下面我們來看一個(gè)具體的例子,我們的任務(wù)是根據(jù)天氣情況計(jì)劃是否要外出打球: 


首先來算一下根節(jié)點(diǎn)的熵: 


然后再分別計(jì)算每一種劃分的信息熵,比方說我們選擇Outlook這個(gè)特征來做劃分,那么得到的信息熵為

據(jù)此可計(jì)算采用Outlook這個(gè)特征來做劃分時(shí)的信息增益為 

G(PlayBall,Outlook)=E(PlayBall)?E(PlayBall,Outlook)=0.94?0.693=0.247

同理,選用其他劃分時(shí)所得到之信息增益如下: 

取其中具有最大信息增益的特征來作為劃分的標(biāo)準(zhǔn),然后你會(huì)發(fā)現(xiàn)其中一個(gè)分支的熵為零(時(shí)間中閾值可以設(shè)定來懲罰過擬合),所以把它變成葉子,即得 


對(duì)于其他熵不為零(或者大于預(yù)先設(shè)定的閾值)的分支,那么則需要做進(jìn)一步的劃分 


根據(jù)上述的規(guī)則繼續(xù)遞歸地執(zhí)行下去。最終,我們得到了如下一棵決策樹。 



C4.5算法

C4.5是2006年國際數(shù)據(jù)挖掘大會(huì)票選出來的十大數(shù)據(jù)挖掘算法之首,可見它應(yīng)該是非常powerful的!不僅如此,事實(shí)上,C4.5的執(zhí)行也相當(dāng)?shù)膕traightforward。

C4.5算法與ID3算法相似,C4.5算法是由ID3算法演進(jìn)而來的。C4.5在生成的過程中,用信息增益比來選擇特征。下面我們給出一個(gè)更加正式的C4.5算法的描述:

輸入:訓(xùn)練數(shù)據(jù)集D,特征集A,閾值?; 
輸出:決策樹T。

如果D中所有實(shí)例屬于同一類Ck,則置T為單結(jié)點(diǎn)樹,并將Ck作為該結(jié)點(diǎn)的類,返回T;

如果A=?,則置T為單結(jié)點(diǎn)樹,并將D中實(shí)例數(shù)最大的類Ck作為該結(jié)點(diǎn)的類,返回T;

否則,計(jì)算A中各特征對(duì)D的信息增益比,選擇信息增益比最大的特征Ag;

(1) 如果Ag的信息增益比小于閾值?,則置T為單結(jié)點(diǎn)樹,并將D中實(shí)例數(shù)最大的類Ck作為該結(jié)點(diǎn)的類,返回T;

(2) 否則,對(duì)Ag的每一可能值ai,依Ag=ai將D分割為若干非空子集Di,將Di中實(shí)例數(shù)最大的類作為標(biāo)記,構(gòu)建子結(jié)點(diǎn),由結(jié)點(diǎn)及其子結(jié)點(diǎn)構(gòu)成樹T,返回T;

對(duì)結(jié)點(diǎn)i,以Di為訓(xùn)練集,以A?{Ag}為特征集,遞歸地調(diào)用步驟(1)~(3),得到子樹Ti,返回Ti。




How to do it in practice?

易見,C4.5跟ID3的執(zhí)行步驟非常類似,只是在劃分時(shí)所采用的準(zhǔn)則不同。我們這里不再贅述。但是這里可以來看看在實(shí)際的數(shù)據(jù)分析中,該如何操作。我們所使用的數(shù)據(jù)是如下所示的一個(gè)csv文件,文件內(nèi)容同本文最初給出的Play Ball例子中的數(shù)據(jù)是完全一致的。 

使用Weka進(jìn)行數(shù)據(jù)挖掘是非常容易的,你不再需要像R語言或者M(jìn)ATLAB那樣編寫代碼或者調(diào)用函數(shù)?;贕UI界面,在Weka中你只需要點(diǎn)點(diǎn)鼠標(biāo)即可!首先我們單擊“Explorer”按鈕來打開操作的主界面,如下圖所示。 


然后我們單擊“Open File…”,并從相應(yīng)的目錄下選擇你要用來進(jìn)行模型訓(xùn)練的數(shù)據(jù)文件,如下圖所示。 


Weka提供了非常易于操作的各種數(shù)據(jù)預(yù)處理功能,你可以自己嘗試探索一下。注意到屬性Day其實(shí)在構(gòu)建決策樹時(shí)是不需要的,我選中該屬性,并將其移除,如下圖所示。 


完成數(shù)據(jù)預(yù)處理后,我們就可以開始進(jìn)行模型訓(xùn)練了。因?yàn)槲覀兪且?a href='/map/jueceshu/' style='color:#000;font-size:inherit;'>決策樹,所以選擇“Classify”選項(xiàng)卡,然后在“Classifier”中選擇J48。你可以能會(huì)疑惑我們不是要使用C4.5算法建立決策樹嗎?為什么要選擇J48呢?其實(shí)J48是一個(gè)開源的C4.5的Java實(shí)現(xiàn)版本(J48 is an open source Java implementation of the C4.5 algorithm),所以J48就是C4.5。 數(shù)據(jù)分析師培訓(xùn)


然后你可以自定義的選擇“Test options”中的一些測(cè)試選項(xiàng),這里我們不做過多說明。然后單擊“Start”按鈕,Weka就為我們建立了一棵決策樹,你可以從“Classifier output”欄目中看到模型訓(xùn)練的一些結(jié)果。但是對(duì)于決策樹而言,你可以覺得文字看起來還不夠直觀。不要緊,Weka還為你提供了可視化的決策樹建模呈現(xiàn)。為此,你需要右鍵單擊剛剛訓(xùn)練好的模型,然后從右鍵菜單中選擇“Visualize tree”,如下圖所示。 


最后我們得到了一棵與前面例子中相一致的決策樹,如下圖所示。 

在后續(xù)的決策樹系列文章中,我們將繼續(xù)深入探討CART算法等相關(guān)話題。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }