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

熱線電話:13121318867

登錄
首頁精彩閱讀邏輯回歸算法學(xué)習(xí)與思考
邏輯回歸算法學(xué)習(xí)與思考
2018-03-04
收藏

邏輯回歸算法學(xué)習(xí)與思考

本文是作者對(duì)于邏輯回歸算法的學(xué)習(xí)和思考,主要介紹:邏輯回歸的算法介紹、邏輯回歸的數(shù)學(xué)原理、邏輯回歸的實(shí)際應(yīng)用、邏輯回歸的總結(jié)以及網(wǎng)絡(luò)安全場景預(yù)測,歡迎大家參考討論。

邏輯回歸的算法介紹

邏輯回歸(Logistic regression)是機(jī)器學(xué)習(xí)分類算法的其中一種,核心思想是利用現(xiàn)有數(shù)據(jù)對(duì)分類邊界建立回歸方程,以此進(jìn)行分類?;貧w可以理解為最佳擬合,是一種選擇最優(yōu)分類的算法。

邏輯歸回中會(huì)有一些新詞匯需要理解。

h函數(shù): 根據(jù)輸入的數(shù)據(jù)預(yù)測類別的函數(shù),Andrew Ng的公開課中稱為hypothesis function。

j函數(shù): 我們需要一個(gè)機(jī)制去評(píng)估我們的h函數(shù)的好壞,j函數(shù)的作用是評(píng)估h函數(shù)的好壞,一般這個(gè)函數(shù)稱為損失函數(shù)(loss function)或者錯(cuò)誤函數(shù)(error function)。

邏輯回歸的數(shù)學(xué)原理

h函數(shù)相關(guān)(預(yù)測函數(shù))

首先,我們先看看邏輯回歸的預(yù)測函數(shù),h函數(shù)!

其中含有θ (又稱:theta)的變量為(當(dāng)x0=1時(shí),可以進(jìn)行矩陣變換):

h函數(shù)的原型函數(shù)為sigmoid函數(shù),展示如下:

sigmoid方程的圖形如下,sigmoid函數(shù)的取值范圍為 (0,1)

這里進(jìn)行下小結(jié),邏輯回歸的預(yù)測函數(shù)使用sigmoid函數(shù)作為原型函數(shù),然后對(duì)sigmoid函數(shù)的x進(jìn)行替換,替換為一個(gè)多元一次方程。其中多元一次方程的θ為我要尋找最優(yōu)組合的內(nèi)容。

j函數(shù)相關(guān)

j函數(shù)的目標(biāo)就是找到一組最佳θ,使得J(θ)的值最小。

我們可以利用梯度下降算法來求得J(θ)的值最小,根據(jù)梯度下降法可得θ的更新過程。j=0 時(shí),代表更新j向量的第0分量,j=1 時(shí),代表更新j向量的第1分量,以此類,為了方便理解,可以把j看成數(shù)組vector_j,j=0,就是更新vector_j[0]。α為學(xué)習(xí)步長。

經(jīng)過一些數(shù)學(xué)推導(dǎo)的最終形式如下(推導(dǎo)過程為對(duì)θ求偏導(dǎo)數(shù))。

ps:xj為x向量的第j分量,還可以理解為x數(shù)組的第j項(xiàng),其實(shí)下圖是對(duì)θ數(shù)組的第j項(xiàng)進(jìn)行更新的算式,然而真正代碼角度是對(duì)整個(gè)θ數(shù)組進(jìn)行更新,也就是下下圖的樣子。

當(dāng)我們把上式向量化處理就得到了代碼可以處理的形式。

對(duì)比著代碼看(代碼出自《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》)

這里進(jìn)行下小結(jié),我們?yōu)榱藢ふ易罴训摩冉M合,設(shè)置了J(θ)函數(shù),我們利用已知數(shù)據(jù)(建模的訓(xùn)練數(shù)據(jù))來尋找最優(yōu)的θ組合使得J(θ)最小,而我們找最優(yōu)θ組合的算法為梯度下降算法。

邏輯回歸的實(shí)際應(yīng)用

目前單機(jī)使用機(jī)器學(xué)習(xí)算法的python庫為sklearn庫,實(shí)例如下。

使用該模型,需要手工調(diào)整函數(shù)的參數(shù),這個(gè)需要對(duì)算法進(jìn)行理解。

# !/usr/bin/env python
# -*- coding: utf-8 -*-
fromsklearnimportlinear_modelfromsklearn.metricsimportclassification_reportfromsklearn.metricsimportprecision_recall_curve,roc_curve,auc
defmain():train_data=[]train_result=[]foriinopen(‘train_data.txt’).readlines():”‘ 29119 3.440948 0.078331 1 前三位為訓(xùn)練數(shù)據(jù),最后一位為訓(xùn)練結(jié)果 ‘”r=i[:–2].split(‘\t’)train_data.append(r[:3])train_result.append(r[–1])
    clf=linear_model.LogisticRegression(max_iter=10000,C=1e5)
    clf.fit(train_data,train_result)
    
    print‘輸出預(yù)測結(jié)果’
    printclf.predict([[68846,9,0.6]])
    
    print‘輸出預(yù)測概率分布’
    printclf.predict_proba([[68846,9,0.6]])
    
    print‘decision function的系數(shù)’
    printclf.coef_
    
    print‘decision function的截距’
    printclf.intercept_
輸出結(jié)果為

邏輯回歸的總結(jié)

Logistic Regression算法作為一個(gè)二分類算法,主要解決的是線性可分的問題,對(duì)于多分類算法,可以利用Softmax Regression算法。

Softmax Regression是一般化的Logistic Regression,可以把Logistic Regression看成Softmax Regression的特例。

那么Softmax Regression和Logistic Regression該怎么選擇呢?參考Stanford的文章的內(nèi)容。

Softmax 回歸 vs. k 個(gè)二元分類器

如果你在開發(fā)一個(gè)音樂分類的應(yīng)用,需要對(duì)k種類型的音樂進(jìn)行識(shí)別,那么是選擇使用 softmax 分類器呢,還是使用 logistic 回歸算法建立 k 個(gè)獨(dú)立的二元分類器呢?

這一選擇取決于你的類別之間是否互斥,例如,如果你有四個(gè)類別的音樂,分別為:古典音樂、鄉(xiāng)村音樂、搖滾樂和爵士樂,那么你可以假設(shè)每個(gè)訓(xùn)練樣本只會(huì)被打上一個(gè)標(biāo)簽(即:一首歌只能屬于這四種音樂類型的其中一種),此時(shí)你應(yīng)該使用類別數(shù) k = 4 的softmax回歸。(如果在你的數(shù)據(jù)集中,有的歌曲不屬于以上四類的其中任何一類,那么你可以添加一個(gè)“其他類”,并將類別數(shù) k 設(shè)為5。)

如果你的四個(gè)類別如下:人聲音樂、舞曲、影視原聲、流行歌曲,那么這些類別之間并不是互斥的。例如:一首歌曲可以來源于影視原聲,同時(shí)也包含人聲 。這種情況下,使用4個(gè)二分類的 logistic 回歸分類器更為合適。這樣,對(duì)于每個(gè)新的音樂作品 ,我們的算法可以分別判斷它是否屬于各個(gè)類別。

現(xiàn)在我們來看一個(gè)計(jì)算視覺領(lǐng)域的例子,你的任務(wù)是將圖像分到三個(gè)不同類別中。(i) 假設(shè)這三個(gè)類別分別是:室內(nèi)場景、戶外城區(qū)場景、戶外荒野場景。你會(huì)使用sofmax回歸還是 3個(gè)logistic 回歸分類器呢? (ii) 現(xiàn)在假設(shè)這三個(gè)類別分別是室內(nèi)場景、黑白圖片、包含人物的圖片,你又會(huì)選擇 softmax 回歸還是多個(gè) logistic 回歸分類器呢?

在第一個(gè)例子中,三個(gè)類別是互斥的,因此更適于選擇softmax回歸分類器 。而在第二個(gè)例子中,建立三個(gè)獨(dú)立的 logistic回歸分類器更加合適。

網(wǎng)絡(luò)安全場景下的實(shí)踐

邏輯回歸算法作為一個(gè)二分類機(jī)器學(xué)習(xí)算法,主要優(yōu)勢(shì)是學(xué)習(xí)速度快,算法好理解,預(yù)測速度快等特點(diǎn),并且神經(jīng)網(wǎng)絡(luò)在神經(jīng)元上也是采用的是邏輯回歸算法,因此在這個(gè)深度學(xué)習(xí)的大背景下,安全人員還是要學(xué)習(xí)邏輯回歸算法。

對(duì)于在安全攻防上使用邏輯回歸算法,我們先要明白邏輯回歸算法的本質(zhì):邏輯回歸是分類算法。

吸星是安全在機(jī)器學(xué)習(xí)實(shí)踐上一個(gè)非常好的例子,由于吸星使用的是樸素貝葉斯分類算法,那么吸星能不能使用邏輯回顧呢?效果如何呢?這是值得實(shí)踐的。

異常流量識(shí)別,由于瞬時(shí)流量或者流量區(qū)間中會(huì)存在非常多的屬性,而且異常流量識(shí)別屬于二分類,邏輯回歸對(duì)于異常流量監(jiān)測問題,這也是非常值得實(shí)踐的。

網(wǎng)站異常URL識(shí)別,對(duì)于一個(gè)網(wǎng)站,URL的形式具有一定特征的,那么如果被種植了webshell,那么webshell的URL可能會(huì)與正常URL存在差異,因此利用此邏輯回歸也是能解決這類問題的。

其實(shí)總結(jié)起來就是,只要每一條數(shù)據(jù)可以有多個(gè)屬性,就可以利用邏輯回歸

數(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)檢測極驗(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); }