核心:線性迴歸+sigmoid對映。
一、概述
邏輯迴歸模型(Logistic Regression,LR),由名稱上來看,似乎是一個專門用於解決迴歸問題的模型,事實上,該模型更多地用於解決分類問題,尤其是二分類問題。這並不矛盾,因為邏輯迴歸直接輸出的是一個連續值,我們將其按值的大小進行切分,不足一定範圍的作為一個類別,超過一定範圍的作為一個類別,這樣就實現了對分類問題的解決。概況來說就是,先對資料以線性迴歸進行擬合,輸出值以Sigmoid函式進行對映,對映到0和1之間,最後將S曲線切分上下兩個區間作為類別區分的依據。
二、演算法原理
演算法核心是線性迴歸+sigmoid對映。具體來說,就是對於一個待測樣本,以指定的權重和偏置量,計算得到一個輸出值,進而將該輸出值經過sigmoid進一步計算,對映至0和1之間,大於0.5的作為正類,不足0.5的作為負類。模型原理圖示可概括為
線性迴歸的表示式可表示為 \(z=w\cdot x+b\),sigmoid函式表示式表示為 \(y=\frac{1}{1+e^{-z}}\),那麼邏輯迴歸模型的表示式即是\(y=\frac{1}{1+e^{-(w\cdot x+b)}}\)。
邏輯迴歸的分類演算法可表示為
\[\left\{ \begin{aligned} &-1, \frac{1}{1+e^{-(w\cdot x+b)}}<0.5\\ &1, \frac{1}{1+e^{-(w\cdot x+b)}}\geq0.5 \end{aligned} \right.
\]
邏輯迴歸模型的訓練採用交叉熵損失函式,在最佳化過程中,計算得到最佳的引數值,表示式如下
\[J\left( \theta \right)=-\frac{1}{m} \sum_{i=1}^{m}\left[ {y^ilog(h(x^i))} +(1-y^i)log(1-h(x^i))\right]
\]
三、Python實現
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
## 1.定義資料集
train_x = [
[4.8,3,1.4,0.3],
[5.1,3.8,1.6,0.2],
[4.6,3.2,1.4,0.2],
[5.3,3.7,1.5,0.2],
[5,3.3,1.4,0.2],
[7,3.2,4.7,1.4],
[6.4,3.2,4.5,1.5],
[6.9,3.1,4.9,1.5],
[5.5,2.3,4,1.3],
[6.5,2.8,4.6,1.5]
]
# 訓練資料標籤
train_y = [
'A',
'A',
'A',
'A',
'A',
'B',
'B',
'B',
'B',
'B'
]
# 測試資料
test_x = [
[3.1,3.5,1.4,0.2],
[4.9,3,1.4,0.2],
[5.1,2.5,3,1.1],
[6.2,3.6,3.4,1.3]
]
# 測試資料標籤
test_y = [
'A',
'A',
'B',
'B'
]
train_x = np.array(train_x)
train_y = np.array(train_y)
test_x = np.array(test_x)
test_y = np.array(test_y)
## 2.模型訓練
clf_lr = LogisticRegression()
rclf_lr = clf_lr.fit(train_x, train_y)
## 3.資料計算
pre_y = rclf_lr.predict(test_x)
accuracy = metrics.accuracy_score(test_y,pre_y)
print('預測結果為:',pre_y)
print('準確率為:',accuracy)
End.
pdf下載