python機器學(xué)習(xí)Logistic回歸原理推導(dǎo)
前言
Logistic回歸涉及到高等數(shù)學(xué),線性代數(shù),概率論,優(yōu)化問題。本文盡量以最簡單易懂的敘述方式,以少講公式原理,多講形象化案例為原則,給讀者講懂Logistic回歸。如對數(shù)學(xué)公式過敏,引發(fā)不適,后果自負。
Logistic回歸原理與推導(dǎo)
Logistic回歸中雖然有回歸的字樣,但該算法是一個分類算法,如圖所示,有兩類數(shù)據(jù)(紅點和綠點)分布如下,如果需要對兩類數(shù)據(jù)進行分類,我們可以通過一條直線進行劃分(w0 * x0 + w1 * x1+w2 * x2)。當新的樣本(x1,x2)需要預(yù)測時,帶入直線函數(shù)中,函數(shù)值大于0,則為綠色樣本(正樣本),否則為紅樣本(負樣本)。
推廣到高維空間中,我們需要得到一個超平面(在二維是直線,在三維是平面,在n維是n-1的超平面)切分我們的樣本數(shù)據(jù),實際上也就是求該超平面的W參數(shù),這很類似于回歸,所以取名為Logistic回歸。
sigmoid函數(shù)
當然,我們不直接使用z函數(shù),我們需要把z值轉(zhuǎn)換到區(qū)間[0-1]之間,轉(zhuǎn)換的z值就是判斷新樣本屬于正樣本的概率大小。 我們使用sigmoid函數(shù)完成這個轉(zhuǎn)換過程,公式如下。通過觀察sigmoid函數(shù)圖,如圖所示,當z值大于0時,σ值大于0.5,當z值小于0時,σ值小于于0.5。利用sigmoid函數(shù),使得Logistic回歸本質(zhì)上是一個基于條件概率的判別模型。
目標函數(shù)
其實,我們現(xiàn)在就是求W,如何求W呢,我們先看下圖,我們都能看出第二個圖的直線切分的最好,換句話說,能讓這些樣本點離直線越遠越好,這樣對于新樣本的到來,也具有很好的劃分,那如何用公式表示并計算這個目標函數(shù)呢?
這時就需要這個目標函數(shù)的值最大,以此求出θ。
梯度上升法
在介紹梯度上升法之前,我們看一個中學(xué)知識:求下面函數(shù)在x等于多少時,取最大值。
解:求f(x)的導(dǎo)數(shù):2x,令其為0,求得x=0時,取最大值為0。但在函數(shù)復(fù)雜時,求出導(dǎo)數(shù)也很難計算函數(shù)的極值,這時就需要使用梯度上升法,通過迭代,一步步逼近極值,公式如下,我們順著導(dǎo)數(shù)的方向(梯度)一步步逼近。
利用梯度算法計算該函數(shù)的x值:
def f(x_old): return -2*x_old def cal(): x_old = 0 x_new = -6 eps = 0.01 presision = 0.00001 while abs(x_new-x_old)>presision: x_old=x_new x_new=x_old+eps*f(x_old) return x_new -0.0004892181072978443
Logistic回歸實踐
數(shù)據(jù)情況
讀入數(shù)據(jù),并繪圖顯示:
def loadDataSet(): dataMat = [];labelMat = [] fr = open('數(shù)據(jù)/Logistic/TestSet.txt') for line in fr.readlines(): lineArr = line.strip().split() dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) labelMat.append(int(lineArr[2])) return dataMat, labelMat
訓(xùn)練算法
利用梯度迭代公式,計算W:
def sigmoid(inX): return 1.0/(1 + np.exp(-inX)) def gradAscent(dataMatIn, labelMatIn): dataMatrix = np.mat(dataMatIn) labelMat = np.mat(labelMatIn).transpose() m,n = np.shape(dataMatrix) alpha = 0.001 maxCycles = 500 weights = np.ones((n,1)) for k in range(maxCycles): h = sigmoid(dataMatrix * weights) error = labelMat - h weights = weights + alpha * dataMatrix.transpose() * error return weights
通過計算的weights繪圖,查看分類結(jié)果
算法優(yōu)缺點
- 優(yōu)點:易于理解和計算
- 缺點:精度不高
以上就是python機器學(xué)習(xí)Logistic回歸原理推導(dǎo)的詳細內(nèi)容,更多關(guān)于python機器學(xué)習(xí)Logistic回歸的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python機器學(xué)習(xí)性能度量利用鳶尾花數(shù)據(jù)繪制P-R曲線
- Python機器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線
- python機器學(xué)習(xí)pytorch?張量基礎(chǔ)教程
- python機器學(xué)習(xí)pytorch自定義數(shù)據(jù)加載器
- python機器學(xué)習(xí)混淆矩陣及confusion?matrix函數(shù)使用
- python機器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理解析
- Python BentoML構(gòu)建部署和管理機器學(xué)習(xí)模型技巧掌握
相關(guān)文章
keras分類模型中的輸入數(shù)據(jù)與標簽的維度實例
這篇文章主要介紹了keras分類模型中的輸入數(shù)據(jù)與標簽的維度實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python實現(xiàn)PS圖像明亮度調(diào)整效果示例
這篇文章主要介紹了Python實現(xiàn)PS圖像明亮度調(diào)整效果,結(jié)合實例形式分析了Python基于skimage模塊調(diào)整圖片明亮度的原理與具體操作技巧,需要的朋友可以參考下2018-01-01python 計算概率密度、累計分布、逆函數(shù)的例子
這篇文章主要介紹了python 計算概率密度、累計分布、逆函數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python神經(jīng)網(wǎng)絡(luò)MobileNetV2模型的復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)MobileNetV2模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Python函數(shù)遞歸調(diào)用實現(xiàn)原理實例解析
這篇文章主要介紹了Python函數(shù)遞歸調(diào)用實現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08