逻辑回归[2]

逻辑回归算法梳理

1 逻辑回归与线性回归的区别

线性回归逻辑回归
目的预测分类
y ( i ) y^{(i)} y(i)未知{0,1}
函数拟合函数预测函数
参数计算最小二乘最大似然估计
  • 1 (分类和回归):逻辑回归与线性回归都属于广义线性回归模型,回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。

  • 2(输出):直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间

  • 3 (参数估计方法):

    一. 线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重——问题:假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。

    二.逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数,这就不存在上述问题

    三:也正是因为使用的参数估计的方法不同,线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值(threshold)

    参考逻辑回归与线性回归的区别与联系

2 逻辑回归原理

在这里插入图片描述

是一种‘ s i g m o i d sigmoid sigmoid’函数,它将 z z z值转化为一个接近0或者1的 y y y

本质:在线性回归模型的预测结果去逼近真实标记的对数几率

3 逻辑回归损失函数推导及优化

逻辑回归公式:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = g(\theta^Tx) = \frac{1}{1+e^{-\theta^Tx}} hθ(x)=g(θTx)=1+eθTx1
y y y的取值有特殊的含义,它表示结果取1的概率,因此对于输入 x x x分类结果为类别1和类别0的概率分别为:
P ( y = 1 ∣ x ; θ ) = h θ ( x ) P(y=1|x;\theta) = h_\theta(x) P(y=1x;θ)=hθ(x)

P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y=0|x;\theta) =1- h_\theta(x) P(y=0x;θ)=1hθ(x)

将两公式合成一个:
P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y P(y|x;\theta) = (h_\theta(x))^y(1-h_\theta(x))^{1-y} P(yx;θ)=(hθ(x))y(1hθ(x))1y
利用最大似然估计,假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积
L ( θ ) = p ( y ⃗ ∣ X : θ ) = ∏ i = 0 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m ( h θ ( x ( i ) ) ) y ( i ) ( 1 − h θ ( x ) ) 1 − y ( i ) L(\theta)=p(\vec{y}|X:\theta)=\prod_{i=0}^mp(y{(i)}|x^{(i)};\theta)\\ =\prod_{i=1}^m(h_\theta(x^{(i)}))^{y^{(i)}}(1-h_\theta(x))^{1-y^{(i)}} L(θ)=p(y X:θ)=i=0mp(y(i)x(i);θ)=i=1m(hθ(x(i)))y(i)(1hθ(x))1y(i)
为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数 J ( θ ) J(\theta) J(θ)
J ( θ ) = −   l o g L ( θ ) = − ∑ i = 1 m [ y i l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\ logL(\theta)=-\sum_{i=1}^m[y_{i}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_{\theta}(x(i)))] J(θ)= logL(θ)=i=1m[yilog(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
损失函数 J ( θ ) J(\theta) J(θ) θ \theta θ求导(这里只以一个训练样本为例)
∂ ( J ( θ ) ) ∂ ( θ j ) = − ( y g ( θ T x ) − 1 − y 1 − g ( θ T x ) ) ∂ ( g ( θ T x ) ) ∂ ( θ j )      = − ( y g ( θ T x ) − 1 − y 1 − g ( θ T x ) ) g ( θ T x ) ( 1 − g ( θ T x ) ) x j = − ( y − h θ ( x ) ) x j \begin{aligned} \frac{\partial(J(\theta))}{\partial(\theta_j)} &= -(\frac{y}{g(\theta^Tx)}-\frac{1-y}{1-g(\theta^Tx)})\frac{\partial(g(\theta^Tx))}{\partial(\theta_j)}\\ \qquad \qquad \ \qquad \ \ \qquad &=-(\frac{y}{g(\theta^Tx)}-\frac{1-y}{1-g(\theta^Tx)})g(\theta^Tx)(1-g(\theta^Tx))x_j \\ &=-(y-h_{\theta}(x))x_j \end{aligned} (θj)(J(θ))   =(g(θTx)y1g(θTx)1y)(θj)(g(θTx))=(g(θTx)y1g(θTx)1y)g(θTx)(1g(θTx))xj=(yhθ(x))xj
则对于 θ \theta θ的更新方式:
θ j = θ j − α ( h θ ( x ) − y ) x j \color{Red}\theta_j = \theta_j-\alpha(h_\theta(x)-y)x_j θj=θjα(hθ(x)y)xj

  • 线性回归和逻辑回归对参数有相同的更新方式

    ps:线性回归的梯度方向

    ∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = 2 ⋅ 1 2 ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( h θ ( x ) − y ) = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = ( h θ ( x ) − y ) x j \begin{aligned} \frac{\partial}{\partial \theta_{j}} J(\theta) &=\frac{\partial}{\partial \theta_{j}} \frac{1}{2}\left(h_{\theta}(x)-y\right)^{2} \\ &=2 \cdot \frac{1}{2}\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(h_{\theta}(x)-y\right) \\ &=\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(\sum_{i=0}^{n} \theta_{i} x_{i}-y\right) \\ &=\left(h_{\theta}(x)-y\right) x_{j} \end{aligned} θjJ(θ)=θj21(hθ(x)y)2=221(hθ(x)y)θj(hθ(x)y)=(hθ(x)y)θj(i=0nθixiy)=(hθ(x)y)xj

4 正则化与模型评估指标

  • 惩罚高阶参数,使它们趋近于0,这样就会得到较为简单的假设,也就是得到简单的函数,这样就不易发生过拟合。但是在实际问题中,并不知道哪些是高阶多项式的项,所以在代价函数中增加一个惩罚项/正则化项,将代价函数中所有参数值都最小化,收缩每一个参数。

  • 实现参数的稀疏有什么好处吗?

    1.简化模型,避免过拟合 ——因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据表现性能极差

    2.参数变少可以使整个模型获得更好的可解释性

  • 参数值越小代表模型越简单

    因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大

  • 正则化方法

    1 L o L_o Lo范数:向量中非零元素的个数( 0 0 = 0 0^0=0 00=0
    ∣ ∣ x ∣ ∣ 0 = ∑ ( i = 0 ) n x i 0 ||x||_0 = \sum_{(i=0)}^nx_i^0 x0=(i=0)nxi0
    若用L_0范数来规则化参数矩阵,就是希望参数矩阵大部分元素都为0,使特征矩阵稀疏。但是很难优化求解。

    2 L 1 L_1 L1范数:向量中各个绝对值元素之和
    ∣ ∣ x ∣ ∣ 1 = ∑ ( i = 0 ) n ∣ x i ∣ ||x||_1=\sum_{(i=0)}^n|x_i| x1=(i=0)nxi

​ 3 L 2 L_2 L2范数:各参数的平方和再求平方根
∣ ∣ x ∣ ∣ 2 = ∑ ( i = 0 ) n ∣ x i 2 ∣ ||x||_2 = \sqrt{\sum_{(i=0)^n}|x_i^2|} x2=(i=0)nxi2

模型评估指标

  • 回归任务常用的性能度量:均方误差

  • 分类问题中:

    1 错误率和精度

    2 查准率、查全率、F1

    3 ROC和AUC

    4 代价敏感错误率与代价曲线

5 逻辑回归的优缺点

  • 优点

    1. 适合需要得到一个分类概率的场景
    2. 计算代价不高,容易理解实现。逻辑回归在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。
    3. 逻辑回归对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征)
  • 缺点

    1. 容易欠拟合,分类精度不高
    2. 据特征有缺失或者特征空间很大时表现效果并不好。

6 样本不均衡问题解决方向

样本不平衡:指分类任务中不同类别的训练样例数目差别很大的情况(假设正样本较少,反类样例较多)

  • 欠采样:直接对训练集中的反类样例进行‘欠采样’,即除去一些反例,使正、反例数目接近
  • 过采样:增加一些正例,使正、反数目接近
  • 阈值移动

7 sklearn 参数

  • s k l e a r n . l i n e a r m o d e l . L o g i s t i c R e g r e s s i o n sklearn.linear_model.LogisticRegression sklearn.linearmodel.LogisticRegression
class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0,fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None,solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0,warm_start=False, n_jobs=1)
参数
p e n a l t y penalty penalty惩罚项,str类型,默认为l2
d u a l dual dual对偶或原始方法,bool类型,默认为False
t o l tol tol停止求解的标准,float类型,默认为1e-4
c c c正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化
f i t _ i n t e r c e p t fit\_intercept fit_intercept是否存在截距或偏差,bool类型,默认为True
i n t e r c e p t _ s c a l i n g intercept\_scaling intercept_scaling仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1
c l a s s _ w e i g h t class\_weight class_weight用于标示分类模型中各种类型的权重
r a n d o m _ s t a t e random\_state random_state随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用
s o l v e solve solve优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga
m a x _ i t e r max\_iter max_iter算法收敛最大迭代次数,int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。
m u l t i _ c l a s s multi\_class multi_class分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上
v e r b o s e verbose verbose日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
w a r m _ s t a r t warm\_start warm_start热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)
n _ j o b s n\_jobs n_jobs并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:在ggplot2中,逻辑回归可以使用geom_smooth()函数来实现。该函数可以在散点图中绘制回归线,并根据数据自动拟合逻辑回归模型。例如,可以使用以下代码绘制逻辑回归模型: ```R library(ggplot2) ggplot(data=mpg, mapping=aes(x=hwy, y=cty, color=year)) + geom_point() + geom_smooth(method="glm", method.args=list(family="binomial")) ``` 这段代码首先设置数据集为mpg,并指定x轴和y轴的变量为hwy和cty,颜色按照年份进行区分。然后使用geom_point()函数绘制散点图,使用geom_smooth()函数添加逻辑回归线。在geom_smooth()函数中,使用method参数指定回归方法为glm,method.args参数指定回归模型的家族为binomial,即逻辑回归模型。 引用:另外,也可以使用stat_smooth()函数来实现逻辑回归。该函数可以在统计图中绘制拟合的曲线或线性模型。以下是使用stat_smooth()函数实现逻辑回归的代码示例: ```R library(ggplot2) ggplot(data=mpg, mapping=aes(x=hwy, y=cty, color=year)) + geom_point() + stat_smooth(method="glm", method.args=list(family="binomial")) ``` 与前面的代码类似,这段代码也是先设置数据集和变量,然后使用geom_point()函数绘制散点图,最后使用stat_smooth()函数添加逻辑回归线。在stat_smooth()函数中,同样使用method参数指定回归方法为glm,method.args参数指定回归模型的家族为binomial。 综上所述,在ggplot2中可以通过使用geom_smooth()或stat_smooth()函数来实现逻辑回归。这两个函数都可以在散点图中绘制回归线,并根据数据拟合逻辑回归模型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [R语言学习—— ggplot2函数](https://blog.csdn.net/m0_52069102/article/details/125957340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值