Logistic 回归


Logistic 回归虽然名称叫做回归,但其实是一种分类模型;
在周志华老师的西瓜书中,把这一方法叫做:对数几率回归,其实看完整个推导过程,感觉这个名称更合适一些。几率就是一个事件发生的概率和不发生的概率的比值;

问题描述:

已知某些样本x,具有n个特征值 w 1 , w 2... w n w1,w2...w_n w1,w2...wn, 以及对应的标签 y y y;
对样本x进行正确分类;

解决思路:

最简单的方法,就是找到一个函数来拟合特征之间的关系,比如最简单的线性函数,然后把这个函数值用一个可微的函数,把真实的标签跟线性回归预测的值联系起来即可;如果特征之间不是线性组合,也就是数据是线性不可分的,可以用多项式函数或者其他函数来替代线性回归;目前我们只考虑线性回归的情况。

z = w T ∗ x + b z = w^T * x + b z=wTx+b

f ( z ) = 1 1 + e − z f(z) = \frac{1}{1+e^{-z}} f(z)=1+ez1

我们假设y为x为正样本的概率,那么1-y,就是x为负样本的概率,那么就可以用 y 1 − y \frac{y}{1-y} 1yy 来表示x为正样本的几率

l n y 1 − y = z = w T ∗ x + b ln \frac{y}{1-y} = z = w^T * x + b ln1yy=z=wTx+b

y = e z 1 + e z y = \frac{e^z}{1+e^z} y=1+ezez

即:

l n p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = z ln \frac{p(y=1|x)}{p(y=0|x)} = z lnp(y=0x)p(y=1x)=z

p ( y = 1 ∣ x ) = e z 1 + e z p(y=1|x) = \frac{e^z}{1+e^z} p(y=1x)=1+ezez

p ( y = 0 ∣ x ) = 1 1 + e z p(y=0|x) = \frac{1}{1+e^z} p(y=0x)=1+ez1

有些问题当中,y的取值是-1或者1, 而不是0或者1;
这个如果 $ y = {-1, 1}$, 则上式可以写成:

p ( y ) = 1 1 + e y z p(y) = \frac{1}{1+e^{yz}} p(y)=1+eyz1

损失函数

我们可以直接使用最大似然函数:
m a x L ( w , b ) = ∑ l n p ( y ∣ x , w , b ) max L(w, b) = \sum ln p(y|x, w, b) maxL(w,b)=lnp(yx,w,b)

m i n L ( w , b ) = ∑ l n ( 1 + e − y ( w x + b ) ) min L(w, b) = \sum ln(1+e^{-y(wx + b)}) minL(w,b)=ln(1+ey(wx+b))

这是一个关于w的高阶可导连续凸函数;根据凸优化理论,经典的数值优化算法都可以对此求解,比如随机梯度下降。我们接下来就使用随机梯度下降算法来优化求解:
w j = w j − r ∗ ∑ i x i j ∗ y i ∗ f ( − y i x i w ) wj = wj - r * \sum_ix_{ij}*y_i* f(-yixiw) wj=wjrixijyif(yixiw)

其中的r表示步长,也就是学习率;

而如果给定的标签y={0, 1}, 那么损失函数则是如下表达式:

L = y ∗ l o g p ( y = 1 ) + ( 1 − y ) ∗ l o g p ( y = 0 ) L = y*logp(y=1) + (1-y)*log p(y=0) L=ylogp(y=1)+(1y)logp(y=0)

L = y ∗ z + l o g ( e z + 1 ) L = y*z + log (e^z + 1) L=yz+log(ez+1)

梯度更新方法:

w j = w j − r ∗ ∑ i x i j ∗ ( y i − f ( w ∗ x ) ) wj = wj - r * \sum_ix_{ij}* (y_i - f(w*x)) wj=wjrixij(yif(wx))

最大似然损失函数、两种交叉熵损失函数

在分类问题中,我们看一看到,其实最大似然损失函数,跟交叉熵损失函数长得一样一样的。

在机器学习中,还会经常看到两种长得不一样的损失函数:

− t j ∗ l o g ( y j ) -t_j * log(y_j) tjlog(yj) // t i 表 示 样 本 真 实 的 l a b e l , i 表 示 样 本 下 标 t_i表示样本真实的label, i表示样本下标 tilabeli

− ∑ i t i ∗ l o g ( y i ) + ( 1 − t i ) ∗ l o g ( 1 − y i ) -\sum_i t_i* log(y_i) + (1-t_i)*log(1-y_i) itilog(yi)+(1ti)log(1yi)

而这两个长得形式完全不同的损失函数都是交叉熵损失函数,但是对应的模型的最后输出层不一样,前者对应的是softmax, 而后者对应的是sigmoid函数输出

因为交叉熵是衡量两个数据分布的差异,如果是最后一层是softmax的话,本身就是数据的一个分布,所以可以直接衡量真实标签和预测值之间的差异从;
但如果最后输出层是sigmoid的话,相当于输出就不是一个分布了,因为和不是1;每个神经元对应的是伯努利分布,输出的就是对应的概率

Python实现code

import numpy as tf
def read()

Logister回归模型相比于SVM的区别

  1. 前者是交叉熵损失函数, 后者是合页损失函数
  2. 前者处理非线性,需要组合特征或者特征离散化; 后者靠核函数;
  3. 前者对异常点比较敏感,
  4. 后者适合处理数据量比较少的场景
  5. 前者是参数化模型,后者是非参数化模型

如何选取这两个模型的问题:
用m表示特征数量,用n表示样本数量;
1) 如果m远远大于n, 则选择LR;
2)如果两者差不多,选择SVM + 高斯核函数;
3)如果m小于n,则需要手动增加一些特征,变成第一种情况,然后使用LR

==================================
参数模型:根据预先设计的规则,例如方差损失最小,进行学习,参数模型例子:回归(线性回归、逻辑回归)模型;最好可以看一下或者直接进行一下相关的推导;根据规则,拥有少部分数据就可以;

非参数模型:不需要事先假设规则,直接挖掘潜在数据中的规则;非参数模型例子:KNN,决策树,挖掘数据潜在的特征,所以比较灵活;

特征离散化

在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:

离散特征的增加和减少都很容易,易于模型的快速迭代;
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值