公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml
上一篇文章介紹了線性迴歸模型,它用於處理迴歸問題。python
此次來介紹一下 Logistic 迴歸,中文音譯爲邏輯迴歸,它是一個非線性模型,是由線性迴歸改進而來(因此邏輯迴歸的名字中帶有「迴歸」二字)。git
雖然 Logistic 迴歸的名字中也有迴歸二字,可是該算法並不是用於迴歸問題,而是用於處理分類問題,主要用於處理二分類問題,也能夠用於處理多分類問題。github
Logistic 迴歸模型將一個事件出現的機率適應到一條S 型曲線上,這條曲線稱爲 Logistic 曲線。算法
Logistic 迴歸函數也叫作 Sigmoid 函數,其基本形式以下:shell
其中:dom
g(z) 公式中的自變量 z 就是咱們以前介紹的線性模型公式:函數
NumPy 庫中的 linspace(start, stop, num) 方法在 [start, stop]
範圍內生成 num
個等距的數字,好比:優化
>>> import numpy as np >>> >>> np.linspace(2.0, 3.0, num=5) # 在[2.0, 3.0] 範圍生成 5 個數字 array([2. , 2.25, 2.5 , 2.75, 3. ]) >>> >>> np.linspace(2.0, 3.0, num=6) # 在[2.0, 3.0] 範圍生成 6 個數字 array([2. , 2.2, 2.4, 2.6, 2.8, 3. ])
爲了畫出 Logistic 曲線,定義 x,y 以下:spa
x = np.linspace(-10, 10, 1000) # 在[10, -10] 範圍生成 1000 個數字 y = [1/(1+np.exp(-i)) for i in x] # 根據 Sigmoid 函數求出 y
用 Matplotlib 畫出折線圖:
import matplotlib.pyplot as plt plt.plot(x, y) plt.show()
S 型曲線以下:
其中橙色的直線是我添加上去的。從上圖能夠直觀的看出S 型曲線的走勢,當 x 值在 [-6, 6] 以外時,y 的值變化很是小。
將 Logistic 迴歸用於二分類問題時,分類爲 0 和 1,當 g(z) 大於0.5 時,納入1 類;當 g(z) 小於0.5 時,納入0 類。
sklearn 庫中的 LogisticRegression 類是Logistic 迴歸的實現。
LogisticRegression 類的原型以下:
LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
來看下其中比較重要的幾個參數:
l1
,l2
,elasticnet
,none
,默認爲 l2
。
l2
:當模型參數知足高斯分佈的時候,使用 l2
。支持 l2
的優化方法有 newton-cg
,sag
和lbfgs
。l1
:當模型參數知足拉普拉斯分佈的時候,使用 l1
。在0.19 版本中,sag
支持 l1
。elasticnet
:僅 liblinear
支持 elasticnet
。none
:表示不使用正則化(liblinear
不支持)。liblinear
:coordinate descent (CD),座標降低法。適用於數據量小的數據集。lbfgs
:爲默認值,在0.22 版本中改成 liblinear
。newton-cg
:牛頓CG法。sag
:平均梯度降低法,適用數據量大的數據集。saga
:隨機平均梯度降低法,適用數據量大的數據集。關於上面的一些參數,也能夠參考這裏。
下面咱們使用 Logistic 迴歸對鳶尾花數據集進行分析。
首先加載數據集:
from sklearn.datasets import load_iris X, y = load_iris(return_X_y=True)
構建 Logistic 迴歸模型:
from sklearn.linear_model import LogisticRegression clf = LogisticRegression() # 建立對象 clf.fit(X, y) # 擬合模型
對模型的準確率進行評分:
>>> clf.score(X, y) 0.97
能夠看到,用 Logistic 迴歸對鳶尾花數據集進行分類,最終的準確率爲 97%
,可見效果仍是不錯的。
Logistic 迴歸多用於二分類問題,但也能夠用於多分類,就像上面對鳶尾花數據集的分析。要讓 Logistic 迴歸處理多分類問題,就要作出一些改進。
一種改進方式是經過屢次二分類實現多分類的目的。假如一個數據集有 N 個分類,那就須要訓練 N 個二分類模型。對於一個新的特徵數據,就須要用這 N 個分類器都對其進行處理,最終選擇機率最大的那個分類做爲多分類的結果。
另外一種方法是將 Logistic 迴歸改進爲 Softmax 迴歸,Softmax 迴歸給出的是實例在每一種分類下出現的機率,從而處理多分類任務。
Logistic 迴歸模型是線性迴歸的改進,用於處理分類問題。實際應用中,Logistic 迴歸普遍用於廣告系統預估點擊率,生物統計等領域。
(本節完。)
推薦閱讀:
歡迎關注做者公衆號,獲取更多技術乾貨。