机器学习 逻辑回归(Logistic Regression)

逻辑回归(Logistic Regression)

   首先说明一个问题,逻辑回归虽然以回归命名,但逻辑回归却是一个分类算法,用于估计某种事物的可能性(概率),再通过激活函数(也有称为假设函数)映射到各个分类。
  逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。

算法思想

  逻辑回归模型旨在找到一条直线或者一个平面,是的这个直线或者平面能够分割开不同类别的数据样本,其称为决策边界(Decision Boundary)。
在这里插入图片描述

算法特点

优点:
1)逻辑回归最大的优势在于它的输出结果不仅可以用于分类,还可以表征某个样本属于某类别的概率。;
2)可以适用于连续性和类别性自变量;
3)计算代价不高,速度很快,易于理解和实现;

缺点:
1)对模型中自变量多重共线性较为敏感,它可以结合L2正则化来解决该问题;
2)容易欠拟合,一般准确度不太高;
3)对于非线性特征,需要进行转换。
4)只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类)

数学模型

sigmoid函数

sigmoid就是前面所提到的激活函数之一,也是最经典的激活函数。其功能是将输出映射到[0,1]之间的函数,也正是因为这个sigmoid函数,赋予了逻辑回归模型不同于线性回归模型的分类特点。函数表达式:
y = 1 1 + e − z y = \frac{1}{1+e^{-z}} y=1+ez1
函数图像:
在这里插入图片描述

模型建立与求解

二分类

先介绍二分类算法(0-1),建立测试函数: h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_θ(x) = g(θ^{T}x)= \frac{1}{1+e^{-θ^{T}x}} hθ(x)=g(θTx)=1+eθTx1
其中: θ 0 + θ 2 x 1 + θ 2 x 2 + . . . + θ i x i = ∑ i − 1 n θ i x i = θ T X θ_0+θ_2x_1+θ_2x_2+...+θ_ix_i=\sum_{i-1}^{n}θ_ix_i=θ^{T}X θ0+θ2x1+θ2x2+...+θixi=i1nθixi=θTX

令分类为1的概率为 h θ ( x ) h_θ(x) hθ(x),而无疑问的分类为0的概率则为 1 − h θ ( x ) 1-h_θ(x) 1hθ(x),那么分类任务可表达为:
P ( y = 1 ∣ x ; θ ) = h θ ( x ) P(y=1|x;θ)=h_θ(x) P(y=1x;θ)=hθ(x)
P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y=0|x;θ)=1-h_θ(x) P(y=0x;θ)=1hθ(x)
将两个表达式进行整合得:
P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y P(y|x;θ)=(h_θ(x))^{y}(1-h_θ(x))^{1-y} P(yx;θ)=(hθ(x))y(1hθ(x))1y
P ( y ∣ x ; θ ) P(y|x;θ) P(yx;θ)进行极大似然估计求解
L θ = ∏ i = 1 m P ( y ∣ x ; θ ) = ∏ i = 1 m ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y L_θ = \prod_{i=1}^{m}P(y|x;θ)=\prod_{i=1}^{m}(h_θ(x))^{y}(1-h_θ(x))^{1-y} Lθ=i=1mP(yx;θ)=i=1m(hθ(x))y(1hθ(x))1y
取对数:
                    l θ = l o g L θ l_θ = logL_θ lθ=logLθ
                    = l o g ∏ i = 1 m P ( y ∣ x ; θ ) = log\prod_{i=1}^{m}P(y|x;θ) =logi=1mP(yx;θ)
                    = ∑ i = 1 m ( y i l o g h θ ( x ) ) + ( 1 − y i ) l o g ( 1 − h θ ( x ) ) ) = \sum_{i=1}^{m}(y_ilogh_θ(x))+(1-y_i)log(1-h_θ(x))) =i=1m(yiloghθ(x))+(1yi)log(1hθ(x)))

此时应用他梯度上升求最大值,引入 J θ = − 1 m l θ J_θ=-\frac{1}{m}l_θ Jθ=m1lθ(交叉熵损失函数)转换为梯度下降任务,以此作为目标函数。应用梯度下降算法求解参数。

具体梯度下降算法步骤在线性回归模型已经详细讲解。
J θ J_θ Jθ的偏导数:
在这里插入图片描述
最后得到逻辑回归模型梯度下降算法的参数更新公式为
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j θ_j := θ_j-α\frac{1}{m} \sum_{i=1}^{m}(h_θ(x_i)-y_i)x_i^{j} θj:=θjαm1i=1m(hθ(xi)yi)xij

多分类

对于多分类逻辑回归模型,与二分类模型区别只在激活函数的选择,在此引入Softmax函数,Softmax函数可以将结果映射到更高维度:
在这里插入图片描述

逻辑回归模型总结:

在这里插入图片描述

python实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
iris = load_iris()

X = iris.data[:,[2, 3]]  #取鸢尾花数据集中第3,4列数据
y = iris.target         #取鸢尾花数据集的标签
clf = LogisticRegression(random_state=0, solver='lbfgs',multi_class='multinomial')
clf.fit(X, y)
clf.predict(X[:2, :])
clf.predict_proba(X[:2, :]) 
clf.score(X, y)


x_min, x_max = X[:,0].min() - 1, X[:,0].max() + 1
y_min, y_max = X[:,1].min() - 1, X[:,1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max,0.1),
                     np.arange(y_min,y_max, 0.1))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.plot()
plt.contourf(xx, yy, Z, alpha=0.4, cmap = plt.cm.RdYlBu)
plt.scatter(X[:, 0], X[:, 1], c=y,  cmap = plt.cm.brg)
plt.title("Logistic Regression")
plt.xlabel("Petal.Length")
plt.ylabel("Petal.Width")
plt.show()

程序结果:
在这里插入图片描述
主要参数:

参数Value
penalty正则化项的选择。正则化主要有两种:L1和L2,LogisticRegression默认选择L2正则化。‘liblinear’ 支持L1和L2,但‘newton-cg’, ‘sag’ 和‘lbfgs’ 只支持L2正则化。
dual:bool(True、False), default:False如果为True,则求解对偶形式,只有在penalty=‘l2’ 且solver=‘liblinear’ 时有对偶形式;通常样本数大于特征数的情况下,默认为False,求解原始形式。
tol : float, default:1e-4停止标准,误差不超过tol时,停止进一步的计算。
C :float,default:1.0正则化强度(正则化系数λ)的倒数; 必须是大于0的浮点数。 与支持向量机一样,较小的值指定更强的正则化,通常默认为1。
fit_intercept :bool(True、False),default:True是否存在截距,默认存在。
class_weight :dict or ‘balanced’,default:Noneclass_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。 如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))
solver :‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,‘saga’,default:liblinearliblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。 lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。saga:线性收敛的随机优化算法。

soler参数总结:
   对于小型数据集,‘liblinear’是一个不错的选择,而’sag’和’saga’对于大型的更快。对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失;'liblinear’仅限于一项损失。 ‘newton-cg’,'lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证, 可以使用sklearn.preprocessing中的缩放器预处理数据。

参考资料

sklearn逻辑回归参数详细说明

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值