目錄
邏輯迴歸是一種分類算法 ,通過對訓練樣本的學習,找到一個超平面 WX+b=0 將正負兩類樣本分開。
sigmoid function的圖像是一條值在0到 1之間的S型曲線,如圖:
一、邏輯迴歸模型的構建
我們簡單地把原來的X替換爲一個線性模型就得到了上面公式。代替部分可以擴展如下:
除了上面的表現形式,我們也可以用另外一種形式來表達二元邏輯迴歸模型。將上面模型簡單地進行變化:
若將y視爲樣本x作爲正例的可能性,則1-y是其作爲反例的可能性。稱爲機率,稱爲對數機率 。
邏輯迴歸實際上是用線性迴歸模型的預測結果去逼近真實標記的對數機率,因此,其對應的的模型稱爲“對數機率迴歸”。
二、邏輯迴歸的損失函數
類別爲1和0的後驗概率估計:
通過極大似然估計(MLE)推到邏輯迴歸的損失函數:
將0和1兩類的後驗概率合併可得:
使用極大似然估計來根據給定的訓練集估計出參數,將n個訓練樣本的概率相乘得到:
似然函數是相乘的模型,我們可以通過取對數將等式右側變爲相加模型,以便於求解。變換後如下:
似然函數是極大化,而損失函數是最小化,因此,我們需要在上式前加一個負號便可得到最終的損失函數:
其等價於:
三、損失函數求解
使用梯度下降法求解邏輯迴歸損失函數。梯度下降的迭代公式如下:
問題變爲如何求損失函數對參數的梯度。下面進行詳細推導過程:
將求得的梯度帶入迭代公式中,即爲:
四、sklearn實現邏輯迴歸
參考官網的例子,對鳶尾花數據進行邏輯迴歸。
import numpy as np
from sklearn import linear_model, datasets
from sklearn.cross_validation import train_test_split
# 1.加載數據
iris = datasets.load_iris()
X = iris.data[:, :2] # 使用前兩個特徵
Y = iris.target
#np.unique(Y) # out: array([0, 1, 2])
# 2.拆分測試集、訓練集。
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
# 設置隨機數種子,以便比較結果。
# 3.標準化特徵值
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
# 4. 訓練邏輯迴歸模型
logreg = linear_model.LogisticRegression(C=1e5)
logreg.fit(X_train, Y_train)
# 5. 預測
prepro = logreg.predict_proba(X_test_std)
acc = logreg.score(X_test_std,Y_test)