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

熱線電話:13121318867

登錄
首頁精彩閱讀機(jī)器學(xué)習(xí)故事匯-集成算法
機(jī)器學(xué)習(xí)故事匯-集成算法
2018-03-21
收藏

機(jī)器學(xué)習(xí)故事匯-集成算法

【咱們的目標(biāo)】系列算法講解旨在用最簡(jiǎn)單易懂的故事情節(jié)幫助大家掌握晦澀無趣的機(jī)器學(xué)習(xí),適合對(duì)數(shù)學(xué)很頭疼的同學(xué)們,小板凳走起!

今天咱們就來討論一下傳說中的集成算法,之前咱們講的算法都是單兵作戰(zhàn)的(單個(gè)模型得到結(jié)果),但是回過頭來想一想現(xiàn)在是不是干啥都講究個(gè)合作共贏,所以咱們的模型也是如此。單個(gè)算法確實(shí)勢(shì)單力薄,假如我們可以把它們組合起來會(huì)不會(huì)得到更好的效果呢?(算法們要揭竿起義了,今亡亦死舉大計(jì)亦死。。。編不下去了)

集成算法中,有三個(gè)核心模塊,咱們就一一道來,先來概述一下:

Bagging集成:并行的構(gòu)造多個(gè)基礎(chǔ)模型(隨機(jī)森林),每一個(gè)基礎(chǔ)模型都各自為政,然后把它們的結(jié)果求一個(gè)平均就好!

Boosting集成:串行的構(gòu)造多個(gè)基礎(chǔ)模型(Xgboost),每一個(gè)基礎(chǔ)模型都要嚴(yán)格篩選,在前面的基礎(chǔ)上加進(jìn)來的新模型后,它們整體的效果起碼得沒加這個(gè)新的基礎(chǔ)模型前要強(qiáng)吧!

Stacking集成:多種算法群毆一起上!選擇多個(gè)機(jī)器學(xué)習(xí)算法做同一件事,最后把它們的結(jié)果合并就OK啦!

先來看看第一個(gè)家伙Bagging模型,其典型代表就是隨機(jī)森立了,簡(jiǎn)單來說就是并行的訓(xùn)練一堆樹模型,然后求其平均結(jié)果,在這里我們要討論一個(gè)問題,就是每個(gè)樹模型該怎么構(gòu)造呢?如果不加入任何限制,那每個(gè)樹模型不都差不多嘛,那最后的平均結(jié)果又會(huì)有什么變化呢?所以為了結(jié)果的泛化能力更強(qiáng),必須要使得每個(gè)樹模型表現(xiàn)出多樣性,也就是盡可能的讓每個(gè)樹模型都不一樣!

這該怎么做呢?什么影響模型呢?數(shù)據(jù)絕對(duì)是最大的影響因子,這里的森林很好理解了,就是把樹放在一起,那么隨機(jī)又是什么呢?為了保證每個(gè)樹的多樣性,在構(gòu)建模型時(shí),我們做了二重隨機(jī)(我自創(chuàng)的詞。。。)第一重就是對(duì)樣本的選擇,每次隨機(jī)的有放回的選擇部分樣本作為一棵樹的訓(xùn)練樣本(比如選擇百分之八十作為訓(xùn)練集)。第二重還要考慮特征了,既然樣本數(shù)據(jù)能隨機(jī),那么特征也是一樣的,每棵樹選擇的特征也是不一樣的隨機(jī)選擇部分特征來建模!

隨機(jī)的意義非常重要,這是隨機(jī)森林的精神所在!

隨機(jī)森林作為灰常經(jīng)典的機(jī)器學(xué)習(xí)算法,優(yōu)勢(shì)自然少不了,當(dāng)我們建模完之后,還可以對(duì)特征進(jìn)行重要性評(píng)估,其實(shí)簡(jiǎn)單來說一個(gè)特征的重要與否可以取決于建模的時(shí)候如果把這個(gè)特征換成噪音特征再去看看結(jié)果的錯(cuò)誤率是不是顯著上升,如果顯著上升,那么這個(gè)特征自然很重要,如果沒變化,那這個(gè)特征就沒啥用了,因?yàn)樗驮胍魶]啥區(qū)別!

隨機(jī)森林中樹的個(gè)數(shù)是不是越多越好呢?理論上越多的樹效果應(yīng)該會(huì)更好吧,但是實(shí)際上我們把樹的個(gè)數(shù)增加到一定的時(shí)候比如100棵了已經(jīng),再往上增加樹的個(gè)數(shù)結(jié)果也只會(huì)發(fā)生小范圍的浮動(dòng),基本也就穩(wěn)定了!

Boosting集成中典型的代表就屬Xgboost啦,一個(gè)大殺器,這個(gè)算法由于涉及的數(shù)學(xué)比較多,咱們后續(xù)來一個(gè)專題去講Xgboost,我們先來看看簡(jiǎn)單些的Adaboost。

Adaboost算法概述來說就是,首選我有一個(gè)非常簡(jiǎn)單的模型,比如深度為1的樹模型,然后我去預(yù)測(cè)一下結(jié)果,在結(jié)果中我發(fā)現(xiàn)某些樣本預(yù)測(cè)錯(cuò)了,這個(gè)時(shí)候第二個(gè)簡(jiǎn)單的樹模型就來了,還是同樣的任務(wù)只不過數(shù)據(jù)的權(quán)重發(fā)生了變換,一開始所有的數(shù)據(jù)都是相同的權(quán)重,但是第二次會(huì)把前面那次預(yù)測(cè)錯(cuò)的數(shù)據(jù)的權(quán)重增大,相對(duì)來說預(yù)測(cè)對(duì)的數(shù)據(jù)的權(quán)重就會(huì)減小。說白了就是讓后面的模型更注重我之前哪些數(shù)據(jù)分錯(cuò)了,這回好能分對(duì)它?。ê帽任覀?cè)诳荚嚽岸紩?huì)復(fù)習(xí)之前做錯(cuò)的題)

最后來看一下堆疊模型吧,社會(huì)我Stacking,人狠話不多,不需要多解釋,做了一堆算法,然后把它們的結(jié)果堆疊起來,每個(gè)算法都有自己的預(yù)測(cè)結(jié)果,這些結(jié)果組合在一起那不相當(dāng)于一個(gè)新的特征嘛,再把它們結(jié)果組成的特征去做一個(gè)分類或者回歸,又得到了一個(gè)唯一的結(jié)果。


數(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); }