1、逻辑回归与线性回归的区别和联系
1)线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。 2)线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量。 3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系 4)logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系
2、逻辑回归的原理
逻辑回归是利用回归类似的方法来解决分类问题。假设有一个二分类问题,输出y{0,1},而线性模型(下文将展示这个模型)的的预测值z是实数值,我们希望找到一个阶跃函数将实数z映射为{0,1},这样我们就能很好的处理分类问题了。那么逻辑回归中是使用什么函数来进行映射的呢?就是sigmoid函数

sigmoid函数的图像:

sigmoid函数中的z就是线性函数的z,因为g(z)最后输出的时样本类别的概率值,所以我们可以把阈值设为0.5,g(z)大于等于0.5的看作1,小于0.5的看作0,这样我们就能利用逻辑回归来处理二分类问题了。分类结果就是这样子的。

那我们现在的问题就是怎样计算得到线性函数的模型,也就是我们上文提到输出为z的线性模型。为了使模型能分类更准确,我们需要得出一个最优的线性模型函数。也就是下图所示的公式。如何让这个参数达到最优呢?我们就要对每个x找到最优的参数,这也是我们接下来要求解的问题。

此时我们可以先将线性模型和sigmoid函数结合起来构造逻辑回归的预测函数:

通常求解回归问题(也就是上面的线性问题)的常规步骤为三步:
1.寻找预测函数(x)
2.构造损失函数J()
3.想办法使得J()函数最小并求得回归参数θ
构造损失函数
上面我们已经写出了辑回归的预测函数,所以下一步我们要构造损失函数J()。构造损失函数J()我们可能会先想到模仿线性回归中的平方误差作为损失函数,但是如果使用平方误作损失函数的话我们得到的损失函数就是一个非凸函数,这就意味着损失函数有许多局部最优解,就不能得到全局最优的。

非凸函数(左)凸函数(右)
那我们就要构造其他的损失函数了。我们再来看问题本身,我们要解决的时二分类问题,函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

y(标签)要么取0要么取1,这样就可以把两个类别进行整合,得到一个更直观的表达。

此时P就是某个样本的概率值,我们只要最大化样本的概率就可以得到最好的分类模型了。接下来我们用极大似然函数来求解样本的概率值P

为了简化运算,我们让等式的两边都取对数,对数似然函数为:

这里就是用极大似然估计来求最优的θ。最大似然估计就是求使l(θ)取最大值时的θ,其实这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。因为在很多其它的讲解中都是用梯度下降来求解l(θ),是因为它们在前l(θ)加了一个负号,使J(θ)=-l(θ),此时就是用梯度下降来求J(θ)了。这里我们使用梯度下降来求解。如果你想用梯度上升求解也没问题。
梯度下降法求的最小值
θ更新过程:


θ更新过程可以写成:

3、逻辑回归损失函数推导及优化
假设函数
hθ(x)=11+e−θTx(假设函数)
(假设函数)hθ(x)=11+e−θTx
用于二分类
p(x)={hθ(x),(1−hθ(x)),if y=1if y=0
p(x)={hθ(x),if y=1(1−hθ(x)),if y=0
总结:如果我们取对数和负值,可以代表对应的成本函数。和似然函数相反的方向。(log只是利于计算)。
cost(x,θ)={−log(hθ(x)),−log(1−hθ(x)),if y=1if y=0
cost(x,θ)={−log(hθ(x)),if y=1−log(1−hθ(x)),if y=0
统一公式
我们找到联合概率公式:
p(y|x,θ)=hθ(x)y⋅(1−hθ(x))1−y,(统一概率)
(统一概率)p(y|x,θ)=hθ(x)y⋅(1−hθ(x))1−y,
最大似然
最大似然就是最大化的所有样本的概率公式:
L(θ)=∏i=1mp(yi|xi,θ)(最大似然)
(最大似然)L(θ)=∏i=1mp(yi|xi,θ)
对数-最大似然
对数最大似然就是最大化的所有样本的概率公式:
L(θ)=∑i=1mlogp(yi|xi,θ)=∑i=1m[hθ(xi)yi+(1−hθ(xi))(1−yi)]
L(θ)=∑i=1mlogp(yi|xi,θ)=∑i=1m[hθ(xi)yi+(1−hθ(xi))(1−yi)]
我们的目标是最大化似然函数。 如果转化为损失函数,那就是最小化。
损失函数J(loss function)
J=−1mL(θ)=−1m∑i=1m[hθ(xi)yi+(1−hθ(xi))(1−yi)](损失函数)
J=−1mL(θ)(损失函数)=−1m∑i=1m[hθ(xi)yi+(1−hθ(xi))(1−yi)]
参数迭代公式
θj:=θj−α∗∑i=1m(h(x(i)−y(i))(x(i)j)
θj:=θj−α∗∑i=1m(h(x(i)−y(i))(xj(i))
解释:
1. 参数第j个分量的更新,和每个样例都有关系。
2. 如果m取全部,则是用所有数据来更新分量j
3. m=1则是用一个实例来更新参数,也就是随机梯度下降。
4. 更新的量,与速率、当前实例的j分量、误差值(假设-当前)共同决定。
总结
一般的学习模型的三个重要步骤:
1. 寻找h函数(即预测函数);比如逻辑回归的 f(w,b);线性之后多了一个激活。
2. 构造J函数(损失函数);不同的损失函数,代表了不同的优化方向。比如:逻辑回归如果用最小方差来作为评价函数,则容易导致局部最优。
3. 想办法使得J函数最小并求得回归参数(θ);各种数值优化方法,随机梯度下降;牛顿法等。
简称:找目标、定方向、执行解决。
4、正则化与模型评估指标
-
正则化就是对最小化经验误差函数上加约束,这样的约束可以解释为先验知识(正则化参数等价于对参数引入先验分布)。约束有引导作用,在优化误差函数的时候倾向于选择满足约束的梯度减少的方向,使最终的解倾向于符合先验知识(如一般的l-norm先验,表示原问题更可能是比较简单的,这样的优化倾向于产生参数值量级小的解,一般对应于稀疏参数的平滑解)。
-
同时,正则化解决了逆问题的不适定性,产生的解是存在,唯一同时也依赖于数据的,噪声对不适定的影响就弱,解就不会过拟合,而且如果先验(正则化)合适,则解就倾向于是符合真解(更不会过拟合了),即使训练集中彼此间不相关的样本数很少。
-
5、逻辑回归的优缺点
优点:
1)预测结果是界于0和1之间的概率;
2)可以适用于连续性和类别性自变量;
3)容易使用和解释;
缺点:
1)对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性;
2)预测结果呈“S”型,因此从log(odds)向概率转化的过程是非线性的,在两端随着log(odds)值的变化,概率变化很小,边际值太小,slope太小,而中间概率的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,无法确定阀值。
6、样本不均衡问题解决办法
(1)产生新数据型(2)对原数据的权值进行改变(3)通过组合集成方法解决(4)通过特征选择
7、sklearn参数
class sklearn.linear_model.LogisticRegression( penalty=’l2’, 参数类型:str,可选:‘l1’ or ‘l2’, 默认: ‘l2’。该参数用于确定惩罚项的范数 dual=False, 参数类型:bool,默认:False。双重或原始公式。使用liblinear优化器,双重公式仅实现l2惩罚。 tol=0.0001, 参数类型:float,默认:e-4。停止优化的错误率 C=1.0, 参数类型:float,默认;1。正则化强度的导数,值越小强度越大。 fit_intercept=True, 参数类型:bool,默认:True。确定是否在目标函数中加入偏置。 intercept_scaling=1, 参数类型:float,默认:1。仅在使用“liblinear”且self.fit_intercept设置为True时有用。 class_weight=None, 参数类型:dict,默认:None。根据字典为每一类给予权重,默认都是1. random_state=None, 参数类型:int,默认:None。在打乱数据时,选用的随机种子。 solver='warn', 参数类型:str,可选:{'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, 默认:liblinear。选用的优化器。 max_iter=100, 参数类型:int,默认:100。迭代次数。 multi_class='warn', 参数类型:str,可选:{'ovr', 'multinomial', 'auto'},默认:ovr。如果选择的选项是'ovr',那么二进制问题适合每个标签。对于“多项式”,最小化的损失是整个概率分布中的多项式损失拟合,即使数据是二进制的。当solver ='liblinear'时,'multinomial'不可用。如果数据是二进制的,或者如果solver ='liblinear','auto'选择'ovr',否则选择'multinomial'。 verbose=0, 参数类型:int,默认:0。对于liblinear和lbfgs求解器,将详细设置为任何正数以表示详细程度。 warm_start=False, 参数类型:bool,默认:False。是否使用之前的优化器继续优化。 n_jobs=None,参数类型:bool,默认:None。是否多线程 )
参考博客:
https://blog.youkuaiyun.com/nageaixiaodenanhai/article/details/81592713
https://blog.youkuaiyun.com/iterate7/article/details/78992027

被折叠的 条评论
为什么被折叠?



