机器学习算法[2]--Logistic回归原理详解及sklearn实现

1. Logistic回归

1.1 原理

Logistic回归是一种分类算法,通过将线性回归预测值映射到{0, 1}之间实现预测值到概率的转换;即根据数据集对分类边界线建立回归公式,以此进行分类。

Logistic回归选择Sigmoid作为映射函数,其中Sigmoid函数及其导数如图:
在这里插入图片描述

选择Sigmoid函数原因

  • 在(- ∞ \infty ,+ ∞ \infty )区间内单调递增,将所有预测值映射到(0, 1)区间,符合概率的转换
  • 在(- ∞ \infty ,+ ∞ \infty )区间内单调可微,便于求解

给定一个大小为 m m m的数据集:
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . , ( x m , y m ) } \boldsymbol{D} = \{ (\pmb{x_1},y_1), (\pmb{x_2}, y_2),.....,(\pmb{x_m}, y_m) \} D={ (x1x1x1,y1),(x2x2x2,y2),.....,(xmxmxm,ym)}
则线性回归模型的预测值为:
f ( x i ) = w T x i f(\pmb{x_i}) = \pmb{w}^T\pmb{x_i} f(xixixi)=wwwTxixixi

Logistic回归通过sigmoid函数将预测值映射到(0, 1)区间,即:
h w ( x i ) = σ ( w T x i ) = 1 1 + e − w T x i h_{\boldsymbol w}(\pmb {x_i}) = \sigma(\pmb{w}^T\pmb{x_i}) =\frac{1}{1+e^{-\boldsymbol{w}^T \boldsymbol{x_i}}} hw(xixixi)=σ(wwwTxixixi)=1+ewTxi1其中 0 ≤ h w ( x i ) ≤ 1 0 \leq h_{\boldsymbol w}(\pmb {x_i})\leq 1 0hw(xixixi)1 w = ( w 0 , w 1 , w 2 , . . . . . , w n ) T \pmb{w} = (w_0,w_1, w_2, .....,w_n)^T www=(w0,w1,w2,.....,wn)T x i = ( 1 , x i ( 1 ) , x i ( 2 ) , . . . . . , x i ( n ) ) T \pmb{x_i} = (1,x_i^{(1)}, x_i^{(2)},..... ,x_i^{(n)})^T xixixi=(1xi(1),xi(2),.....,xi(n))Tn为自变量(特征值)个数 y i = y_i= yi= 0或1( i i i从1到 m m m)

Logistic回归是一种概率判别模型,可用最大似然估计(MLE)进行参数 w \pmb w www求解,其通过对数似然损失函数,定义如下:
L ( w ) = − 1 m ∑ i = 1 m [ y i log ⁡ ( h w ( x i ) ) + ( 1 − y i ) log ⁡ ( 1 − h w ( x i ) ) ] L(\pmb w)= \frac{-1}{m} \sum_{i=1}^{m}\left[y_i \log \big(h_{\boldsymbol w}(\pmb {x_i})\big) + (1-y_i) \log \big(1 - h_{\boldsymbol w}(\pmb {x_i})\big)\right] L(www)=m1i=1m[yilog(hw(xixixi))+(1yi)log(1hw(xixixi))]

首先 h w ( x i ) h_{\boldsymbol w}(\pmb {x_i}) hw(xixixi)关于 w \pmb{w} www求导:
∂ h w ( x i ) ∂ w = x i h w ( x i ) ( 1 − h w ( x i ) ) \frac {\partial{h_{\boldsymbol w}(\pmb {x_i})}} {\partial {\boldsymbol{w}}}=\pmb x_i h_{\boldsymbol w}(\pmb {x_i})\big (1-h_{\boldsymbol w}(\pmb {x_i})\big) whw(xixixi)=xxxihw(xixixi)(1hw(xixixi))
L ( w ) L(\pmb {w}) L(www)关于 w \pmb{w} www求导:
∂ L ( w ) ∂ w = − 1 m ∑ i = 1 m [ x i y i ( 1 − h w ( x i ) ) − x i ( 1 − y i ) h w ( x i ) ] = − 1 m ∑ i = 1 m [ x i y i − x i y i h w ( x i ) − x i h w ( x i ) + x i y i h w ( x i ) ] = − 1 m ∑ i = 1 m x i [ y i − h w ( x i ) ] \begin{aligned} \frac {\partial{L(\pmb {w})}} {\partial {\boldsymbol{w}}}&=\frac{-1}{m} \sum_{i=1}^{m}\left[ \pmb x_i y_i\big(1-h_{\boldsymbol w}(\pmb {x_i})\big)-\pmb x_i(1-y_i)h_{\boldsymbol w}(\pmb {x_i})\right] \\ & =\frac{-1}{m} \sum_{i=1}^{m}\left[ \pmb x_i y_i-\pmb x_i y_ih_{\boldsymbol w}(\pmb {x_i})-\pmb x_ih_{\boldsymbol w}(\pmb {x_i})+\pmb x_i y_ih_{\boldsymbol w}(\pmb {x_i})\right] \\ &=\frac{-1}{m} \sum_{i=1}^{m}\pmb x_i\left[ y_i-h_{\boldsymbol w}(\pmb {x_i})\right] \end{aligned} wL(www)=m1i=1m[xxxiyi(1hw(xixixi))xxxi(1yi)hw(xixixi)]=m1i=1m[xxxiyixxxiyihw(xixixi)xxxihw(xixixi)+xxxiyihw(xixixi)]=m1i=1mxxxi[yihw(xixixi)]

因为有非线性项位于求和符号内,所以对 w \pmb w www无法直接求解(无解析解)

:二分类Logistic回归是最大熵模型的特例,可将二分类的Logistic回归推广到一对多(one-vs-rest/all)分类或多分类的Logistic回归

1.2 sklearn实现

参考官方文档:点击查看

Logistic回归可通过sklearn库中linear_model下的LogisticRegression类实现
在这里插入图片描述
有关参数

  • penalty:增加惩罚项,即L1正则化(‘l1’),L2正则化(‘l2’),同时考虑L1和L2正则化-弹性网络('elasticnet)或无(’none)
  • dual:是否转换为对偶问题
  • tol:求解过程中的残差(当小于该值时停止计算)
  • C:反向控制惩罚项的权重,数值越大,惩罚项权重越小
  • fit_intercept:是否计算回归模型的截距(常量),即 w 0 w_0 w0
  • intercept_scaling:当求解器为’liblinear‘且需要计算模型截距时才用
  • class_weight:类别的权重
  • random_state:用于控制伪随机数生成器的种子,仅适用’sag’, ‘saga’和’liblinear’
  • solver:选择用于计算的求解器(’liblinear’,'lbfgs’等)
  • max_iter:最大迭代次数
  • multi_class:选择分类方式,即one-vs-rest(拆解成多个二分类)或多项式
  • verbose:对于’liblinear’和‘lbfgs’求解器设置输出日志的详细程度
  • warm_start:是否使用上一次计算结果来初始化
  • n_jobs:分类并行化时使用的CPU内核数
  • l1_ratio:设置弹性网络中L1正则项的比例

有关属性
在这里插入图片描述

  • classes_:模型已知的类别标签列表
  • coef_:Logistic回归系数,即 w 1 ∼ w n w_1\sim w_n w1wn
  • intercept_:Logistic回归模型的截距(常量),即 w 0 w_0 w0
  • n_features_in_:自变量(特征值)的个数
  • feature_names_in_:自变量的名称,仅当输入自变量有(字符)名称时可用
  • n_iter_:所有类满足残差要求时的迭代次数

有关方法
在这里插入图片描述

  • decision_function:预测样本到分类超平面的(带符号)距离,即置信度水平
  • densify:将回归系数矩阵转化为密集数组形式
  • fit:拟合Logistic回归模型,即计算 w 0 ∼ w n w_0\sim w_n w0wn
  • get_params:获取对应模型参数
  • predict:预测类别
  • predict_log_proba:预测概率的对数
  • predict_proba:预测概率
  • score:获取给定数据集的平均准确度
  • set_params:设置对应模型参数
  • sparsify:将回归系数矩阵转化为稀疏形式

使用案例

>>> import numpy as np
>>> from sklearn import linear_model

>>> reg = linear_model.LogisticRegression(penalty='none') #实例化Logistic回归模型对象
>>> X = np.array([[1, 1], [3, 2], [4, 7], [2, 5]]) #数据
>>> y = np.array([1, 1, 0, 0]) #类别
>>> reg.fit(X, y) #拟合求解
>>> reg.coef_
[[9.22...,-8.14...]]
>>> reg.intercept_
[9.10...]
>>> reg.classes_
[0, 1]
>>> reg.n_features_in_
2
>>> reg.decision_function([[1, 2]])
[2.03...]
>>> reg.predict_proba(X)
[[0.00..., 0.99...], [0.00..., 1.00...],
 [0.99..., 0.00...], [1.00..., 0.00...]]
>>> reg.predict([[1, 3], [5, 2]])
[0, 1]
>>> reg.score(X, y)
1.0

猜你喜欢

转载自blog.csdn.net/qq_56749449/article/details/125382530