邏輯回歸分類算法


邏輯回歸由於其簡單、高效、可解釋性強的特點,在實際用途中十分的廣泛:從購物預測到用戶營銷響應,從流失分析到信用評價,都能看到其活躍的身影。可以說邏輯回歸占據了分類算法中非常重要的地位。
 
邏輯回歸:logistic regression,LR。模型公式是Logistic函數,也叫Sigmoid函數。圖像形如S型曲線。它可以將實數映射到[0,1]區間用來做二分類。 一般選擇0.5作為閥值,大於閥值的歸為類1,小於閥值的歸為類0。公式(Y為決策值,x為特征值,e為自然對數):
邏輯回歸分類算法             
邏輯回歸分類算法
如果希望對正例樣本有更高的准確率,則可以把閾值適當地調高,例如調高到0.6。
如果希望對正例樣本有更高的召回率,則可以把閾值適當地降低,例如降低到0.4。
 
 
用python擬合了不同的自變量取值下,與因變量的成像。結果都是S型曲線,取值集中在0和1上。
1.自變量是線性連續值:
    x = np.arange(-20, 20, 0.1)
    y =1/( 1+math.e**(-x))
    plt.scatter(x, y, c = 'r', marker = 'o')
邏輯回歸分類算法
2.自變量是一元三次方程式的取值:
    z = np.arange(-20, 20, 0.1)
    x = 2*z**3+4*z**2+3*z+10
    y =1/( 1+math.e**(-x))
    plt.scatter(x, y, c = 'r', marker = 'o')

邏輯回歸分類算法

 

損失函數定義與最小化:對數損失函數/梯度下降法求極值
先來回顧下線性回歸的損失函數:
線性回歸預測算法
如果邏輯回歸也用這個,這會引發損失函數為非凸函數的問題,簡單來說就是有很多個局部最低點。
邏輯回歸分類算法
而理想的損失函數是一個如下圖所示的碗狀結構的凸函數,這樣求解到局部最低點,就一定是全局最小值。
邏輯回歸分類算法
用極大似然思想推導出其損失函數,參考https://blog.csdn.net/programmer_wei/article/details/52072939。結論:
邏輯回歸分類算法
匯總所有點的損失,即:
邏輯回歸分類算法
 
邏輯回歸分類算法
 
如果y = 1, 判斷Y(x)=1,則Cost = 0:預測值和真實值相等,損失本該為0;
如果y = 1, 判斷Y(x)=0,則Cost ->∞:預測值和真實值相反,損失無窮大。
 
用梯度下降法求損失最小值,即可求得Logistic函數中的參數:各特征的特征向量、唯一截距。
比如下圖的:
z=w0+w1x1+w2x2+...+wnxn
表示有n個特征Xi,最后會求出每個特征對應的特征向量Wi,以及截距W0。
疑問:Z為什么是線性函數?為什么不是多項式函數?暫未看到相關資料說明。
 
補充:在吳恩達視頻學習P44時了解到:邏輯回歸=線性分類器,非線性的可以用神經網絡算法實現。
邏輯回歸分類算法
 
 
簡單代碼示例
import numpy as np
import math
import matplotlib.pyplot as plt
from sklearn import linear_model
 
x = [[20,3],[23,7],[31,10],[42,13],[50,7],[60,5]]
y = [0,1,1,1,0,0]
 
lr = linear_model.LogisticRegression()
lr.fit(x,y)
 
testX = [[28,10]]
label = lr.predict(testX)
print(label)#預測分類值
prob = lr.predict_proba(testX)
print(prob)#預測分類分別是0和1的概率
print lr.coef_,lr.intercept_,lr.n_iter_ #輸出特征向量、截距、迭代次數
 
#根據上述輸出的特征向量和截距,輸出Logistic函數圖像
x1 = np.arange(20, 60, 1)
x2 = np.arange(30, -10, -1)#也可以寫成x2 = np.arange(-10, 30, 1)
#x1和x2不光個數要相同,還要和模擬樣本數據吻合,如果x2 = np.arange(20, 60, 1)就看不到S型圖像了
x = (-0.19730001)*x1+(0.91555745)*x2-0.04131838
y =1/( 1+math.e**(-x))
plt.scatter(x, y, c = 'r', marker = 'o')
plt.show()
 
#用預測點計算Logistic函數結果,即預測分類較大的概率值
x1=28
x2=10
x= (-0.19730001)*x1+(0.91555745)*x2-0.04131838
y =1/( 1+math.e**(-x))
print y
 
輸出:
邏輯回歸分類算法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM