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

熱線電話:13121318867

登錄
首頁精彩閱讀機器學習實現(xiàn)與分析之五(高斯判別分析)
機器學習實現(xiàn)與分析之五(高斯判別分析)
2017-03-15
收藏

機器學習實現(xiàn)與分析之五(高斯判別分析)

高斯判別分析(GDA)簡介


首先,高斯判別分析的作用也是用于分類。對于兩類樣本,其服從伯努利分布,而對每個類中的樣本,假定都服從高斯分布,則有:

這樣,根據(jù)訓練樣本,估計出先驗概率以及高斯分布的均值和協(xié)方差矩陣(注意這里兩類內(nèi)部高斯分布的協(xié)方差矩陣相同),即可通過如下貝葉斯公式求出一個新樣本分別屬于兩類的概率,進而可實現(xiàn)對該樣本的分類。


GDA詳細推導


那么高斯判別分析的核心工作就是估計上述未知量?,μ0,μ1,Σ?,μ0,μ1,Σ。如何來估計這些參數(shù)?又該最大似然估計上場了。其對數(shù)似然函數(shù)為:

注意此函數(shù)第一部分只和μ0,Σμ0,Σ有關,第二部分只和μ1,Σμ1,Σ有關,最后一部分只和??有關。最大化該函數(shù),首先求??,先對其求偏導數(shù):

此處II為指示函數(shù)。令其為0,可求解出:

同樣地,對μ0μ0求偏導數(shù):

令其為0,可求解得:

根據(jù)對稱性可直接得出:

下面對ΣΣ求偏導數(shù),由于似然函數(shù)只有前面兩部分與ΣΣ有關,則將前兩部分改寫如下:

進而有:

這里推導用到了:

令其為0,從而求得:

上面的推導似乎很復雜,但其結果卻是非常簡潔。通過上述公式,所有的參數(shù)都已經(jīng)估計出來,需要判斷一個新樣本x時,可分別使用貝葉斯求出p(y=0|x)和p(y=1|x),取概率更大的那個類。

實際計算時,我們只需要比大小,那么貝葉斯公式中分母項可以不計算,由于2個高斯函數(shù)協(xié)方差矩陣相同,則高斯分布前面那相同部分也可以忽略。實際上,GDA算法也是一個線性分類器,根據(jù)上面推導可以知道,GDA的分界線(面)的方程為:

取對數(shù)展開后化解,可得:

,則

這就是GDA算法的線性分界面。


GDA實現(xiàn)


這里也采用前面講邏輯回歸生成的數(shù)據(jù)來進行實驗,直接load進來進行處理,詳見邏輯回歸。GDA訓練代碼如下:

View Code

測試代碼:

View Code

訓練結果如下,訓練樣本中,正負樣本均為100個,故?=0.5:

改變正負樣本數(shù)量,即相當于改變先驗概率,則實驗結果如下(相應的??的值顯示在圖像標題):

   


算法分析


1.與邏輯回歸的關系

根據(jù)上面的結果以及貝葉斯公式,可有

那么,令

這不就是邏輯回歸的形式么?

在推導邏輯回歸的時候,我們并沒有假設類內(nèi)樣本是服從高斯分布的,因而GDA只是邏輯回歸的一個特例,其建立在更強的假設條。故兩者效果比較:

a.邏輯回歸是基于弱假設推導的,則其效果更穩(wěn)定,適用范圍更廣

b.數(shù)據(jù)服從高斯分布時,GDA效果更好

c.當訓練樣本數(shù)很大時,根據(jù)中心極限定理,數(shù)據(jù)將無限逼近于高斯分布,則此時GDA的表現(xiàn)效果會非常好


2.為何要假設兩類內(nèi)部高斯分布的協(xié)方差矩陣相同?

從直觀上講,假設兩個類的高斯分布協(xié)方差矩陣不同,會更加合理(在混合高斯模型中就是如此假設的),而且可推導出類似上面簡潔的結果。

假定兩個類有相同協(xié)方差矩陣,分析具有以下幾點影響:

A.當樣本不充分時,使用不同協(xié)方差矩陣會導致算法穩(wěn)定性不夠;過少的樣本甚至導致協(xié)方差矩陣不可逆,那么GDA算法就沒法進行

B.使用不同協(xié)方差矩陣,最終GDA的分界面不是線性的,同樣也推導不出GDA的邏輯回歸形式


3.使用GDA時對訓練樣本有何要求?

首先,正負樣本數(shù)的比例需要符合其先驗概率。若是預先明確知道兩類的先驗概率,那么可使用此概率來代替GDA計算的先驗概率;若是完全不知道,則可以公平地認為先驗概率為  50%。

其次,樣本數(shù)必須不小于樣本特征維數(shù),否則會導致協(xié)方差矩陣不可逆,按照前面分析應該是多多益善。


數(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(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 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); }