機器學(xué)習(xí)(五):邏輯斯蒂回歸原理及案例分析

一、算法簡介

1、定義

邏輯斯蒂回歸(Logistic Regression)雖然名字中有回歸,但是模型最初是為了解決二分類問題。線性回歸模型幫助我們用最簡單的線性方程實現(xiàn)了對數(shù)據(jù)的擬合,但只實現(xiàn)了回歸而無法進行分類,因此LR就是在線性回歸的基礎(chǔ)上,構(gòu)造的一種分類模型。
對線性模型進行分類如二分類任務(wù),簡單的事通過階躍函數(shù)(unit-step function),即將線性模型的輸出值套上一個函數(shù)進行分割,大于z的判定為0,小于z的判定為1.如下圖左所示:


但是這樣的分段函數(shù)數(shù)學(xué)性質(zhì)不好,既不連續(xù)也不可微。因此有人提出了對數(shù)幾率函數(shù),上圖右,簡稱Sigmoid函數(shù),
該函數(shù)具有很好的數(shù)學(xué)性質(zhì),既可以用于預(yù)測類別,并且任意階可微,因此可用于求解最優(yōu)解。將函數(shù)帶進去,可得LR模型為,
其實,LR模型就是在擬合z=W^Tx+b這條直線,使得這條直線盡可能地將原始數(shù)據(jù)中的兩個類別正確的劃分開。

2、損失函數(shù)

回歸問題的損失函數(shù)一般為平均誤差平方損失MSE,LR解決二分類問題,損失函數(shù)為如下形式,
L=-[y\log_{}\vec y+(1-y)\log_{}(1-\vec y)] 這個函數(shù)通常稱為對數(shù)損失logloss,這里的對數(shù)底為自然對數(shù)e,其中真實值y是有0,1兩種情況,而推測值\vec y由于借助對數(shù)幾率函數(shù),其輸出是介于0~1之間連續(xù)概率值。因此損失函數(shù)可以轉(zhuǎn)換為分段函數(shù)
L=\begin{cases} -\log_{}(\vec y), & y=1 \\ -\log_{}(1-\vec y), & y=0 \end{cases}

3、sklearn模塊

sklearn.linear_model模塊提供了很多模型供我們使用,比如線性回歸、嶺回歸、Lasso回歸等。邏輯回歸API,
sklearn.linear_model.LogisticRegression(penalty='l2',C=1.0)

二、案例分析

這里我們使用邏輯回歸預(yù)測癌癥分類,數(shù)據(jù)集主要是來自美國威斯康星州乳腺癌的數(shù)據(jù)集
數(shù)據(jù)集信息:
沃爾伯格博士報告其臨床病例后,樣品會定期到達。因此,數(shù)據(jù)庫反映了數(shù)據(jù)的時間順序分組。該分組信息已從數(shù)據(jù)本身中刪除,立即顯示在下面:

組1:367個實例(1989年1月)
組2:70個實例(1989年 10月)
組3:31個實例(1990年2月)
組4:17個實例(1990年4月) )
組5:48個實例(1990年8月)
組6:49個實例(1991年1月更新)
組7:31個實例(1991年6月)
組8:86個實例(1991年11月)


總計:699分
屬性信息:
1.樣本代碼編號:id編號
2.團塊厚度:1-10
3.細胞大小的均勻性:1-10
4.細胞形狀的均勻性:1-10
5.邊緣附著力:1-10
6.單層上皮細胞大小:1-10
7.裸核:1-10
8.乏味染色質(zhì):1-10
9.正常核仁:1-10
10.線粒體:1-10
11.類別:(良性2,惡性4)
注意數(shù)據(jù)有缺失,用?代替的,我們需要對數(shù)據(jù)進行預(yù)處理。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
def logistic():
    """
    利用邏輯回歸預(yù)測癌癥
    :return:
    """
    #加載數(shù)據(jù)集
    names = ['Sample code number',' Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape',
             'Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin',
             'Normal Nucleoli','Mitoses','Class']
    data = pd.read_csv('../../../數(shù)據(jù)集/機器學(xué)習(xí)/回歸算法/乳腺癌數(shù)據(jù)集/breast-cancer-wisconsin.data',names=names)

    #數(shù)據(jù)集預(yù)處理,缺失值刪除
    data = data.replace(to_replace='?',value=np.nan)
    data = data.dropna()

    #進行數(shù)據(jù)的分割
    x_train,x_test,y_train,y_test = train_test_split(data.loc[:,'Sample code number':'Mitoses'],data.loc[:,'Class'],test_size=0.25)

    #特征值的標(biāo)準(zhǔn)化
    std = StandardScaler()
    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)

    #使用邏輯回歸進行預(yù)測
    lr = LogisticRegression(C=1.0)
    lr.fit(x_train,y_train)
    print(lr.coef_)
    y_predict = lr.predict(x_test)

    #輸出準(zhǔn)確率
    print("準(zhǔn)確率為:",lr.score(x_test,y_test))

    #輸出召回率
    print("召回率:",classification_report(y_test,y_predict,labels=[2,4],target_names=["良性","惡性"]))
    # print(x_train)

    return None

if __name__ == "__main__":
    logistic()


總結(jié)

  • 優(yōu)點:簡單、速度快,適合需要得到一個分類概率的場景
  • 缺點:不好處理多分類的問題

生成模型和判別模型
我們判斷一個算法是生成模型還是判別模型的依據(jù)是有沒有先驗概率,即是否需要從歷史數(shù)據(jù)總結(jié)出概率信息。

判別模型 生成模型(先驗概率)
算法 邏輯回歸 樸素貝葉斯
解決問題 二分類 多分類
應(yīng)用場景 癌癥、二分類需要概率 文本分類
參數(shù) 正則化力度 沒有

但是得出的結(jié)果都有概率解釋。
判斷模型:k-近鄰、決策樹、隨機森林、神經(jīng)網(wǎng)絡(luò)、邏輯回歸
生成模型:樸素貝葉斯、隱馬爾科夫模型

邏輯斯蒂回歸算法我們就講到這里,相對來說理解了線性回歸之后,理解邏輯回歸就非常簡單了,邏輯回歸是對線性回歸的結(jié)果進行了sigmoid優(yōu)化,通過梯度下降算法求解的過程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容