Task2
主要整理逻辑回归相关算法。
逻辑回归与线性回归的联系与区别
联系
逻辑回归本质上还是线性回归, 只是在特征到结果的映射中加入了一层函数映射, 即先把特征线性求和, 然后使用函数 g(z) 将连续结果值映射到 (0, 1) 之间, 我们将线性回归模型的表达式代入到 Logistic(Sigmoid) 函数之中, 就得到了逻辑回归的表达式:
区别
最本质区别: 逻辑回归处理的是分类问题, 线性回归处理的是回归问题. 在逻辑回归中, 因变量的取值是一个 二元分布(不是二项分布). 而线性回归中实际上求解的是对真实函数关系的一个近似拟合。
逻辑回归的原理
逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)
回归模型中,y是一个定性变量,比如y=0或1,logistic方法主要应用于研究某些事件发生的概率
逻辑回归损失函数推导及优化
Cost函数和J函数如下,它们是基于最大似然估计推导得到的。
推导过程:
1.求代价函数
概率综合起来写成:
取似然函数为:
对数似然函数为:
最大似然估计就是求使l(θ)取最大值时的θ,其实这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。
在Andrew Ng的课程中将J(θ)取为下式,即:
2.梯度下降法求解最小值
θ更新过程可以写成:
正则化与模型评估指标
加入了正则化项的逻辑回归目标函数
正则化
正则化是一种回归的形式,它将系数估计(coefficient estimate)朝零的方向进行约束、调整或缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。
L1范数:L1范数在正则化的过程中会趋向于产生少量的特征,而其他的特征都是0(L1会使得参数矩阵变得稀疏)。因此L1不仅可以起到正则化的作用,还可以起到特征选择的作用。
L2范数:L2范数是通过使权重衰减,进而使得特征对于总体的影响减小而起到防止过拟合的作用的。L2的优点在于求解稳定、快速。
模型评估指标
精确率,precision = TP / (TP + FP) 即正确预测的正反例数 /总数
准确率,accuracy = (TP + TN) / (TP + FP + TN + FN) 精确率容易和准确率不能混为一谈,为预测出是正的里面有多少真正是正的。可理解为查准率。
召回率,recall = TP / (TP + FN) 表现为在实际正样本中,分类器能预测出多少。
F1 Score = P*R/2(P+R),其中P和R分别为 precision 和 recall ,在precision与recall都要求高的情况下,可以用F1 Score来衡量。
ROC曲线 逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,引入ROC。在图中,横坐标为False Positive Rate(FPR假正率),纵坐标为True Positive Rate(TPR真正率)。
AUC(Area Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。AUC值(面积)越大的分类器,性能越好。
逻辑回归的优缺点
优点
1 形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。
2 模型效果不错,如果特征工程做的好,效果不会太差。
3 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。
缺点
1 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
2 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
3 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据
样本不均衡问题解决办法
增加数据
机器学习是使用现有的数据对整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好分布估计。即使再增加小类样本数据时,又增加了大类样本数据。
尝试其它评价指标
在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。例如混淆矩阵,精确度,召回率,F1 Score,ROC曲线.
对数据集进行重采样
对小类的数据样本进行采样来增加小类的数据样本个数,即过采样(over-sampling ,采样的个数大于该类样本的个数)。即添加部分样本的副本。
对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样(under-sampling,采样的次数少于该类样本的个素)。即删除部分样本。
尝试产生人工数据样本
一种简单的人工样本数据产生的方法便是,对该类下的所有样本每个属性特征的取值空间中随机选取一个组成新的样本,即属性值随机采样。有一个系统的构造人工数据样本的方法SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本,即该算法构造的数据是新样本,原数据集中不存在的。
尝试不同的分类算法
应该使用不同的算法对其进行比较,因为不同的算法使用于不同的任务与数据。决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。
sklearn参数
penalty=‘l2’ : 字符串‘l1’或‘l2’,默认‘l2’。
用来指定惩罚的基准(正则化参数)。只有‘l2’支持‘newton-cg’、‘sag’和‘lbfgs’这三种算法。
如果选择‘l2’,solver参数可以选择‘liblinear’、‘newton-cg’、‘sag’和‘lbfgs’这四种算法;如果选择‘l1’的话就只能用‘liblinear’算法。
dual=False :
对偶或者原始方法。Dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。
C=1.0 : C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。
fit_intercept=True : 是否存在截距,默认存在。
intercept_scaling=1 : 仅在正则化项为‘liblinear’,且fit_intercept设置为True时有用。
solver=‘liblinear’ : solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择。
a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。 b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 c)newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
来源:https://blog.csdn.net/pumpkindawn/article/details/98944635