Logister 回归


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

问题描述:

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

解决思路:

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

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

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

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

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

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

即:

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

扫描二维码关注公众号,回复: 4333421 查看本文章

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

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

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

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

损失函数

我们可以直接使用最大似然函数:
m a x L ( w , b ) = l n p ( y x , w , b ) max L(w, b) = \sum ln p(y|x, 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)})

这是一个关于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)

其中的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 = y z + l o g ( e z + 1 ) L = y*z + log (e^z + 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))

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

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

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

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

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)

而这两个长得形式完全不同的损失函数都是交叉熵损失函数,但是对应的模型的最后输出层不一样,前者对应的是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作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

猜你喜欢

转载自blog.csdn.net/u011415481/article/details/82717485