日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

监督学习 | 线性分类 之Logistic回归原理及Sklearn实现

發(fā)布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监督学习 | 线性分类 之Logistic回归原理及Sklearn实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1. Logistic 回歸
    • 1.1 Logistic 函數(shù)
    • 1.2 Logistic 回歸模型
      • 1.2.1 模型參數(shù)估計
  • 2. Sklearn 實現(xiàn)
  • 參考資料

相關(guān)文章:

機器學(xué)習(xí) | 目錄

監(jiān)督學(xué)習(xí) | 線性回歸 之多元線性回歸原理及Sklearn實現(xiàn)

監(jiān)督學(xué)習(xí) | 非線性回歸 之多項式回歸原理及Sklearn實現(xiàn)

監(jiān)督學(xué)習(xí) | 線性回歸 之正則線性模型原理及Sklearn實現(xiàn)

1. Logistic 回歸

我們之前討論了如何用線性模型進行回歸,但若要做的是分類問題怎么辦?其實只需要找一個單調(diào)可微函數(shù)將分類任務(wù)的真實標(biāo)記 yyy 與線性回歸模型的預(yù)測值 zzz聯(lián)系起來。

考慮二分類任務(wù),其輸出標(biāo)記 y∈{0,1}y\in \{0,1\}y{0,1} ,而線性回歸模型產(chǎn)生的預(yù)測值 z=wTx+bz=\boldsymbol{w}^T\boldsymbol{x}+bz=wTx+b 是實值,于是,我們只需將實值 zzz 轉(zhuǎn)換為 0/1 值。最理想的是“單位階躍函數(shù)”(unit-step function):

y={0,z<00.5,z=01,z>0(3)y=\left\{ \begin{aligned} &0, &\quad z<0\\ &0.5,&\quad z=0\\ &1,&\quad z>0 \end{aligned} \right.\tag{3}y=???????0,0.5,1,?z<0z=0z>0?(3)

即若預(yù)測值 zzz 大于零就判為正例,小于零就判為反例,預(yù)測值為臨界值零則可任意判斷,如下圖所示:

圖1 單位階躍函數(shù)與對數(shù)幾率函數(shù)

但如圖所示,單位階躍函數(shù)不連續(xù),所以我們希望找到能在一定程度上近似單位階躍函數(shù)的“替代函數(shù)”(surrogate function),并希望它單調(diào)可微,對數(shù)幾率函數(shù)正是這樣一個常用的替代函數(shù)。

1.1 Logistic 函數(shù)

對數(shù)幾率函數(shù)(Logistic function)是一種“Sigmoid 函數(shù)”,它將 zzz 值轉(zhuǎn)化為接近 0 或 1 的 yyy 值,并且其輸出值在 z=0z=0z=0 附近變化很陡。

對數(shù)幾率函數(shù):
f(z)=11+e?z(1)f(z)=\frac{1}{1+e^{-z}} \tag{1}f(z)=1+e?z1?(1)

z=wTx+bz=\boldsymbol{w}^T\boldsymbol{x}+bz=wTx+b 代入得:

p=11+e?(wTx+b)(2)p=\frac{1}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x}+b)}} \tag{2}p=1+e?(wTx+b)1?(2)

移項并取對數(shù)得:

ln(p1?p)=wTx+b(3)ln(\frac{p}{1-p})=\boldsymbol{w}^T\boldsymbol{x}+b \tag{3}ln(1?pp?)=wTx+b(3)

若將 ppp 視為樣本 x\boldsymbol{x}x 作為正例的可能性,則 1?p1-p1?p 是其反例可能性,兩者比值

p1?p(4)\frac{p}{1-p} \tag{4}1?pp?(4)

稱為“幾率”(odds),反映了 x\boldsymbol{x}x 作為正例的相對可能性。對幾率取對數(shù)則得到“對數(shù)幾率”(log odds,亦稱 logit):

logit(p)=lnp1?p(5)logit(p)=ln\frac{p}{1-p} \tag{5}logit(p)=ln1?pp?(5)

由此可以看出,式 (2) 實際上是在用線性回歸模型的預(yù)測結(jié)果取逼近真實標(biāo)記的對數(shù)幾率,因此,其對于的模型稱為“對數(shù)幾率回歸”(logisitc regression,亦稱 logit regression,邏輯回歸)。

需要特別注意到,雖然它的名字是“回歸“,但實際確實一種分類學(xué)習(xí)方法。

這種方法有很多優(yōu)點,例如:

  • 它是直接對分類可能性進行建模,無需實現(xiàn)假設(shè)數(shù)據(jù)分布,這樣就避免了假設(shè)分布不準(zhǔn)確所帶來的問題;

  • 它不是僅預(yù)測出”類別“,而是可得到近似概率預(yù)測,這對許多需要利用概率輔助決策的任務(wù)很有用;

  • 此外,對率函數(shù)是任意階可導(dǎo)的凸函數(shù),有很好的數(shù)學(xué)性質(zhì),現(xiàn)有的許多數(shù)值優(yōu)化算法都可以直接用于求解最優(yōu)解。[1]

1.2 Logistic 回歸模型

w=(w(1),w(2),?,w(n),b)T\boldsymbol{w}=(\boldsymbol{w}^{(1)},\boldsymbol{w}^{(2)},\cdots,\boldsymbol{w}^{(n)},b)^Tw=(w(1),w(2),?,w(n),b)Tx=(x(1),x(2),?,x(n),1)T\boldsymbol{x}=(\boldsymbol{x}^{(1)},\boldsymbol{x}^{(2)},\cdots,\boldsymbol{x}^{(n)},1)^Tx=(x(1),x(2),?,x(n),1)T

我們可以將公式 (3) 重寫為:

lnp(y=1∣x)p(y=0∣x)=w?x(6)ln\frac{p(y=1|x)}{p(y=0|x)}=\boldsymbol{w}\cdot x\tag{6}lnp(y=0x)p(y=1x)?=w?x(6)

顯然有:

p(y=1∣x)=exp(w?x)1+exp(w?x)(7)p(y=1|\boldsymbol{x})=\frac{exp(\boldsymbol{w}\cdot\boldsymbol{x})}{1+exp(\boldsymbol{w}\cdot\boldsymbol{x})} \tag{7}p(y=1x)=1+exp(w?x)exp(w?x)?(7)

p(y=0∣x)=11+exp(w?x)(8)p(y=0|\boldsymbol{x})=\frac{1}{1+exp(\boldsymbol{w}\cdot\boldsymbol{x})} \tag{8}p(y=0x)=1+exp(w?x)1?(8)

這就是 Logistic 回歸模型。

1.2.1 模型參數(shù)估計

Logistic 回歸模型學(xué)習(xí)是,對于給定的訓(xùn)練數(shù)據(jù)集 T={(x1,y1),(x2,y2),?,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}T={(x1?,y1?),(x2?,y2?),?,(xN?,yN?)},其中,xi∈Rn,yi∈{0,1}x_i \in \boldsymbol{R}^n,y_i\in \{0,1\}xi?Rn,yi?{0,1} ,可以應(yīng)用極大似然估計法(MLE)估計模型參數(shù) w\boldsymbol{w}w ,從而得到 Logistic 回歸模型:

設(shè):

P(Y=1∣x)=π(x),P(Y=0∣x)=1?π(x)(9)P(Y=1|x)=\pi(x), \quad P(Y=0|x)=1-\pi(x) \tag{9}P(Y=1x)=π(x),P(Y=0x)=1?π(x)(9)

則似然函數(shù)為:

∏j=1N[π(xi)]yi[1?π(xi)]1?yi(10)\prod_{j=1}^N [\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i} \tag{10} j=1N?[π(xi?)]yi?[1?π(xi?)]1?yi?(10)

對數(shù)似然函數(shù)為:

L(w)=∑i=1N[yilog?π(xi)+(1?yi)log?(1?π(xi))]=∑i=1N[yilog?π(xi)1?π(xi)+log?(1?π(xi))]=∑i=1N[yi(w?xi)?log?(1+exp?(w?xi)](11)\begin{aligned} L(w) &=\sum_{i=1}^{N}\left[y_{i} \log \pi\left(x_{i}\right)+\left(1-y_{i}\right) \log \left(1-\pi\left(x_{i}\right)\right)\right] \\ &=\sum_{i=1}^{N}\left[y_{i} \log \frac{\pi\left(x_{i}\right)}{1-\pi\left(x_{i}\right)}+\log \left(1-\pi\left(x_{i}\right)\right)\right] \\ &=\sum_{i=1}^{N}\left[y_{i}\left(w \cdot x_{i}\right)-\log \left(1+\exp \left(w \cdot x_{i}\right)\right]\right.\end{aligned} \tag{11} L(w)?=i=1N?[yi?logπ(xi?)+(1?yi?)log(1?π(xi?))]=i=1N?[yi?log1?π(xi?)π(xi?)?+log(1?π(xi?))]=i=1N?[yi?(w?xi?)?log(1+exp(w?xi?)]?(11)

L(w)L(w)L(w) 求極大值,即得到 www 的估計值 w^\hat{w}w^

Logistic 回歸學(xué)習(xí)通常采用的方法是梯度下降法及擬牛頓法。[2]

2. Sklearn 實現(xiàn)

sklearn.linear_model.LogisticRegression

from sklearn.linear_model import 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=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)

控制 LogisticRegression 模型正則化程度的超參數(shù)不是 alpha (其他線性模型使用 alpha),而是它的逆反:C,C 的值越高,模型正則化程度越高。

我們使用鳶尾植物數(shù)據(jù)集來說明邏輯回歸。這是一個非常著名的數(shù)據(jù)集,共有 150 朵鳶尾花,分別來自三個不同品種:Setosa 鳶尾花、Versicolor 鳶尾花和 Virginica 鳶尾花,數(shù)據(jù)里包含花的萼片以及花瓣的長度和寬度。

我們試試僅基于花瓣寬度這一個特征,創(chuàng)建一個 Logistic 回歸分類器來檢測 Virginica 鳶尾花。首先加載數(shù)據(jù):

from sklearn import datasets iris = datasets.load_iris() list(iris.keys()) ['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'] X = iris["data"][:, 3:] # petal width y = (iris["target"] == 2).astype(np.int) # 1 if Iris-Virginica, else 0

訓(xùn)練 Logistic 回歸分類器:

from sklearn.linear_model import LogisticRegression log_reg = LogisticRegression(solver="liblinear", random_state=42) log_reg.fit(X, y) LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,intercept_scaling=1, l1_ratio=None, max_iter=100,multi_class='warn', n_jobs=None, penalty='l2',random_state=42, solver='liblinear', tol=0.0001, verbose=0,warm_start=False)

我們來看看對于花瓣寬度在 0 到 3 厘米之間的鳶尾花,模型估算出的概率:

import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] X_new = np.linspace(0, 3, 1000).reshape(-1, 1) y_proba = log_reg.predict_proba(X_new)plt.plot(X_new, y_proba[:, 1], "g-", linewidth=2, label="Virginica 鳶尾花") plt.plot(X_new, y_proba[:, 0], "b--", linewidth=2, label="非 Virginica 鳶尾花")plt.xlabel('花瓣寬度(cm)' ,fontsize=18) plt.ylabel('概率', fontsize=18) plt.legend() <matplotlib.legend.Legend at 0x1a17e98cc0> 圖2 鳶尾花與非鳶尾花的花瓣寬度決策邊界<\center>

可以看到,對于花瓣寬度超過 2cm 的花,分類器可以很有信心地說它是一朵 Virginica 鳶尾花,對于花瓣寬度低于 1cm 的花。也可以大概率地說它不是一朵 Virginica 鳶尾花。

decision_boundary = X_new[y_proba[:, 1] >= 0.5][0] decision_boundary array([1.61561562])

對于花瓣寬度大約為 1.6cm 的花,其是 Virginica 鳶尾花的概率超過 50%,因此分類器認(rèn)為它是一朵 Virginica 鳶尾花;對于花瓣寬度大約為 1.4cm 的花,其是 Virginica 鳶尾花的概率低于 50%,因此分類器認(rèn)為它不是一朵 Virginica 鳶尾花。

log_reg.predict([[1.7], [1.5]]) array([1, 0])

還是同樣的數(shù)據(jù)集,這次使用兩個特征:花瓣寬度和花瓣長度。經(jīng)過訓(xùn)練,虛線表示模型估算概率為 50% 的點,即模型的決策邊界。需要注意這里是一個線性邊界(它是使方程 θ0+θ1x1+θ2x2=0\theta_0+\theta_1x_1+\theta_2x_2=0θ0?+θ1?x1?+θ2?x2?=0 的點 xxx 的集合)。每條平行線都分別代表一個模型輸出的特定概率,從左下的 15% 到右上的 90%。根據(jù)這個模型,右上線之上的所有花都有超過 90% 的概率屬于 Virginica 鳶尾花。[3]

from sklearn.linear_model import LogisticRegressionX = iris["data"][:, (2, 3)] # petal length, petal width y = (iris["target"] == 2).astype(np.int)log_reg = LogisticRegression(solver="liblinear", C=10**10, random_state=42) log_reg.fit(X, y)x0, x1 = np.meshgrid(np.linspace(2.9, 7, 500).reshape(-1, 1),np.linspace(0.8, 2.7, 200).reshape(-1, 1),) X_new = np.c_[x0.ravel(), x1.ravel()]y_proba = log_reg.predict_proba(X_new)plt.figure(figsize=(10, 4)) plt.plot(X[y==0, 0], X[y==0, 1], "bs") plt.plot(X[y==1, 0], X[y==1, 1], "g^")zz = y_proba[:, 1].reshape(x0.shape) contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)left_right = np.array([2.9, 7]) boundary = -(log_reg.coef_[0][0] * left_right + log_reg.intercept_[0]) / log_reg.coef_[0][1]plt.clabel(contour, inline=1, fontsize=12) plt.plot(left_right, boundary, "k--", linewidth=3) plt.text(3.5, 1.5, "Not Iris-Virginica", fontsize=14, color="b", ha="center") plt.text(6.5, 2.3, "Iris-Virginica", fontsize=14, color="g", ha="center") plt.xlabel("Petal length", fontsize=14) plt.ylabel("Petal width", fontsize=14) plt.axis([2.9, 7, 0.8, 2.7]) plt.show() 圖3 線性決策邊界

參考資料

[1] 周志華. 機器學(xué)習(xí)[M]. 北京: 清華大學(xué)出版社, 2016: 57-59.

[2] 李航. 統(tǒng)計學(xué)習(xí)方法[M]. 北京: 清華大學(xué)出版社, 2012: 78-79.

[3] Aurelien Geron, 王靜源, 賈瑋, 邊蕤, 邱俊濤. 機器學(xué)習(xí)實戰(zhàn):基于 Scikit-Learn 和 TensorFlow[M]. 北京: 機械工業(yè)出版社, 2018: 129-131.

總結(jié)

以上是生活随笔為你收集整理的监督学习 | 线性分类 之Logistic回归原理及Sklearn实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。