Logistic 迴歸-原理及應用

公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml

上一篇文章介紹了線性迴歸模型,它用於處理迴歸問題。python

此次來介紹一下 Logistic 迴歸,中文音譯爲邏輯迴歸,它是一個非線性模型,是由線性迴歸改進而來(因此邏輯迴歸的名字中帶有「迴歸」二字)。git

雖然 Logistic 迴歸的名字中也有迴歸二字,可是該算法並不是用於迴歸問題,而是用於處理分類問題,主要用於處理二分類問題,也能夠用於處理多分類問題。github

1,Logistic 迴歸模型

Logistic 迴歸模型將一個事件出現的機率適應到一條S 型曲線上,這條曲線稱爲 Logistic 曲線算法

Logistic 迴歸函數也叫作 Sigmoid 函數,其基本形式以下:shell

在這裏插入圖片描述
其中:dom

  • g(z) 的範圍爲 (0, 1)
  • z 的範圍爲 (-∞, +∞)

g(z) 公式中的自變量 z 就是咱們以前介紹的線性模型公式:函數

在這裏插入圖片描述

2,畫出 Logistic 曲線

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 類。

3,Logistic 迴歸的實現

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)

來看下其中比較重要的幾個參數:

  • penalty:懲罰項,可取的值有 l1l2elasticnetnone,默認爲 l2
    • l2:當模型參數知足高斯分佈的時候,使用 l2。支持 l2 的優化方法有 newton-cgsaglbfgs
    • l1:當模型參數知足拉普拉斯分佈的時候,使用 l1。在0.19 版本中,sag 支持 l1
    • elasticnet:僅 liblinear 支持 elasticnet
    • none:表示不使用正則化(liblinear 不支持)。
  • solver:表明的是邏輯迴歸損失函數的優化方法。有 5 個參數可選,分別爲:
    • liblinear:coordinate descent (CD),座標降低法。適用於數據量小的數據集。
    • lbfgs:爲默認值,在0.22 版本中改成 liblinear
    • newton-cg:牛頓CG法。
    • sag:平均梯度降低法,適用數據量大的數據集。
    • saga:隨機平均梯度降低法,適用數據量大的數據集。
  • max_iter:算法收斂的最大迭代次數,默認爲 10。
  • n_jobs:擬合和預測的時候 CPU 的核數,默認是 1。

關於上面的一些參數,也能夠參考這裏

4,對鳶尾花數據集進行分類

下面咱們使用 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%,可見效果仍是不錯的。

5,Logistic 迴歸處理多分類

Logistic 迴歸多用於二分類問題,但也能夠用於多分類,就像上面對鳶尾花數據集的分析。要讓 Logistic 迴歸處理多分類問題,就要作出一些改進。

一種改進方式是經過屢次二分類實現多分類的目的。假如一個數據集有 N 個分類,那就須要訓練 N 個二分類模型。對於一個新的特徵數據,就須要用這 N 個分類器都對其進行處理,最終選擇機率最大的那個分類做爲多分類的結果。

另外一種方法是將 Logistic 迴歸改進爲 Softmax 迴歸,Softmax 迴歸給出的是實例在每一種分類下出現的機率,從而處理多分類任務。

6,總結

Logistic 迴歸模型是線性迴歸的改進,用於處理分類問題。實際應用中,Logistic 迴歸普遍用於廣告系統預估點擊率,生物統計等領域。

(本節完。)


推薦閱讀:

線性迴歸-如何對數據進行迴歸分析

AdaBoost 算法-分析波士頓房價數據集

如何用Python 製做詞雲-對1000首古詩作詞雲分析

EM 算法-對鳶尾花數據進行聚類

Apriori 算法-如何進行關聯規則挖掘


歡迎關注做者公衆號,獲取更多技術乾貨。

碼農充電站pro

相關文章
相關標籤/搜索