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

熱線電話:13121318867

登錄
首頁精彩閱讀機器學習故事匯-集成算法
機器學習故事匯-集成算法
2018-03-21
收藏

機器學習故事匯-集成算法

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

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

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

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

Boosting集成:串行的構造多個基礎模型(Xgboost),每一個基礎模型都要嚴格篩選,在前面的基礎上加進來的新模型后,它們整體的效果起碼得沒加這個新的基礎模型前要強吧!

Stacking集成:多種算法群毆一起上!選擇多個機器學習算法做同一件事,最后把它們的結果合并就OK啦!

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

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

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

隨機森林作為灰常經(jīng)典的機器學習算法,優(yōu)勢自然少不了,當我們建模完之后,還可以對特征進行重要性評估,其實簡單來說一個特征的重要與否可以取決于建模的時候如果把這個特征換成噪音特征再去看看結果的錯誤率是不是顯著上升,如果顯著上升,那么這個特征自然很重要,如果沒變化,那這個特征就沒啥用了,因為它和噪音沒啥區(qū)別!

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

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

Adaboost算法概述來說就是,首選我有一個非常簡單的模型,比如深度為1的樹模型,然后我去預測一下結果,在結果中我發(fā)現(xiàn)某些樣本預測錯了,這個時候第二個簡單的樹模型就來了,還是同樣的任務只不過數(shù)據(jù)的權重發(fā)生了變換,一開始所有的數(shù)據(jù)都是相同的權重,但是第二次會把前面那次預測錯的數(shù)據(jù)的權重增大,相對來說預測對的數(shù)據(jù)的權重就會減小。說白了就是讓后面的模型更注重我之前哪些數(shù)據(jù)分錯了,這回好能分對它!(好比我們在考試前都會復習之前做錯的題)

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


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

若不方便掃碼,搜微信號: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(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".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 = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+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); }