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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀機(jī)器學(xué)習(xí)從入門到放棄之邏輯回歸
機(jī)器學(xué)習(xí)從入門到放棄之邏輯回歸
2016-08-10
收藏

機(jī)器學(xué)習(xí)從入門到放棄之邏輯回歸

回到本系列的第一篇文章機(jī)器學(xué)習(xí)從入門到放棄之KNN算法,在里面有這樣的一個(gè)問(wèn)題


黃點(diǎn)代表1類電影的分布,綠色代表0類電影的分布,紫色代表需要分類的電影樣本。
那么該怎么判別紫色的那顆點(diǎn)所在的類別呢?

之前給出的是KNN算法,通過(guò)計(jì)算紫色點(diǎn)都周邊的劇場(chǎng)的長(zhǎng)短,來(lái)判斷紫色點(diǎn)屬于哪個(gè)類別?,F(xiàn)在有這樣一種極端情況,黃點(diǎn)和綠點(diǎn)在紫點(diǎn)周圍呈圓周分布,距離一樣,咋辦?

圖畫(huà)得不是太好,大家理會(huì)我的意思就行。

在這種情況,假如像下圖這樣的情況,就容易處理得多了。

紅線的下方是黃色種類,上方時(shí)綠色種類。

這種情況我們稱之為線性分類,關(guān)于如何擬合出這條線程函數(shù)下面會(huì)講述?,F(xiàn)在先來(lái)說(shuō)說(shuō),既然這叫線性分類,那么必然會(huì)有非線性的情況啊,那咋辦呢?

沒(méi)錯(cuò),如果特征可以被線性函數(shù)全部表達(dá),這自然是理想情況,但實(shí)際問(wèn)題中更多的非線性分類。
這時(shí),我們需要將線性函數(shù)轉(zhuǎn)換為非線性函數(shù)。那怎么轉(zhuǎn)換呢,很簡(jiǎn)單,將線性函數(shù)(假設(shè)叫z),扔到某一非線性函數(shù)f(x)內(nèi),得到新的表達(dá)式y(tǒng) = f(z),就是我們所需的非線性分類器了,而f(x)也就作激活函數(shù),它有很多種,本文只介紹邏輯回歸所使用到的sigmoid函數(shù),其表達(dá)式是

其圖像有一個(gè)漂亮的S型

可見(jiàn)在x的取值范圍足夠大的時(shí)候,其從0變1的過(guò)程可以忽略不計(jì),因此,我們習(xí)慣的把>0.5歸為1類,<0.5歸為0類,那么恰好是0.5怎么辦?這個(gè)概率是極低的,如果真的是0.5,那就隨機(jī)歸類,然后出門買張彩票吧,說(shuō)不定就不用繼續(xù)當(dāng)程序員了。 (/≥▽≤/)

算法介紹

回到表達(dá)式上,可知函數(shù)的變量是z其余都是常量,所要要求解該分類函數(shù)的值,就是要確定z的值而z是線性方程,基本的數(shù)學(xué)知識(shí)不難知道,

$$z=a1x1+a2x2……an*xn$$

其中[x1……xn]是輸入向量,所以訓(xùn)練的過(guò)程就是確定于[a1,a2……an]的值,使得該表達(dá)式對(duì)于多個(gè)輸入向量的輸出值正確率最高。

下面開(kāi)始講述求最佳的[a1,a2……an]的方法

顯然,我們可以設(shè)計(jì)一個(gè)函數(shù)來(lái)衡量[a1,a2……an]是否最佳,比如說(shuō)這樣的

J(a)=sumn=0(fa(xi)?y)2

顯然當(dāng)J(a)達(dá)到最小值時(shí),a的值最佳。方法如下,

初始化weight,可以使用隨機(jī)值

代入式子得到err = y – predict

weight = weight + alpha * error * x_train[i],其中alpha稱為學(xué)習(xí)速率,太小會(huì)影響函數(shù)的收斂速度,太大剛才就不收斂了。

為了解決上述問(wèn)題,在《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)中》使用了動(dòng)態(tài)更新alpha的方法,式子為alpha = 4/(1+i)+0.01


上述修改weight的過(guò)程稱為梯度下降法,其中我故意略去了數(shù)學(xué)證明部分,需要的同學(xué)請(qǐng)自行查找專業(yè)資料。

數(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ù)說(shuō)明請(qǐng)參見(jiàn):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); }