机器学习算法梳理逻辑回归

1 逻辑回归和线性回归的联系和区别

a 怎么理解线性回归到逻辑回归
使用线性回归模型可以进行回归学习,预测输出值。这是预测值的问题,如果要做分类任务呢,怎么把预测值和分类任务的标签对应起来?一个方法就是当预测值小于零的时候标签判为零,预测值大于零的时候标签判为1,即‘单位阶跃函数’,不过这种函数不连续,也不可微,所以就找到了一个它的‘替代函数’Sigmoid函数,这样就可以进行分类任务了。

b 逻辑回归的模型 是一个非线性模型,但是它本质上又是一个线性回归模型,因为除去sigmoid映射函数关系,其他的步骤,都是线性回归的算法。可以这么说,逻辑回归,是以线性回归为理论支持的。

C 不同点
机器学习算法梳理逻辑回归

参考:
https://blog.csdn.net/yunhaitianguang/article/details/43877591
https://www.cnblogs.com/voyagflyer/p/5570446.html

2 逻辑回归的原理

从线性回归到逻辑回归需要再做次函数转化,引入一个新的模型,使得它的输出变量再0到1之间,逻辑回归模型的假设是
机器学习算法梳理逻辑回归
机器学习算法梳理逻辑回归
参考:
https://blog.csdn.net/chibangyuxun/article/details/53148005
机器学习笔记

3 损失函数及优化
机器学习算法梳理逻辑回归
在线性回归中用的代价函数是所有样本的误差平方和,先使用这个代价函数,于是我们得到代价函数如图
机器学习算法梳理逻辑回归
这是一个非凸函数,它有许多的局部最小值,这不利于我们用梯度下降法寻找全局最小解。
重新定义代价函数为
机器学习算法梳理逻辑回归
机器学习算法梳理逻辑回归
化简得到代价函数
机器学习算法梳理逻辑回归
得到代价函数之后,便可以用梯度下降法来求得使得代价函数最小的参数了,算法为:
机器学习算法梳理逻辑回归
求导之后
机器学习算法梳理逻辑回归
为了防止过拟合,加入正则化项
机器学习算法梳理逻辑回归
参考:https://cloud.tencent.com/developer/article/1010391

4 正则化和评估指标

正则化:λ是正则化参数,用来在两个不同的目标中控制一个平衡关系,第一个使更好的拟合训练集,第二是要参数尽量小,从而形式尽量简单,避免过拟合。同时,正则化参数不能过大,过大会把其他的参数都最小化了,造成欠拟合。所以祖选择一个合适的值,才能有好的效果。
在正规方程中求解正则化模型时
机器学习算法梳理逻辑回归
评估指标
混淆矩阵(Confusion matrix): 混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。
机器学习算法梳理逻辑回归
精确率,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 在样本失衡,有99个正样本,1个负样本时,全部预测为正,精确率为99%,达到了很高的精确率,可这个预测模型本身就没有什么意义了。
情况2 雷达收到100个来袭导弹的信号,其中只有 3个是真正的导弹信号,其余 97 个是敌方模拟的导弹信号。假如系统判断 98 个(97 个模拟信号加一个真正的导弹信号)信号都是模拟信号,那么Accuracy=99%,很高了,剩下两个是导弹信号,被截掉,这时Recall=2/3=66.67%,Precision=2/2=100%,Precision也很高。但剩下的那颗导弹就会造成灾害。此时这些高的指标也就失去了它的意义。

这就说明要根据具体的数据和任务从众多指标中来选择合适的指标。

参考:
http://lib.csdn.net/article/machinelearning/40643
https://blog.csdn.net/yh_1021/article/details/82765923
http://www.cnblogs.com/zongfa/p/9431807.html

5 逻辑回归的优缺点

优点
1形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。

2模型效果不错,如果特征工程做的好,效果不会太差。

3训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。

缺点
1准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。

2很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。

3处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据

参考:
https://blog.csdn.net/u010867294/article/details/79138603

6 样本不均衡的解决办法

1 增加数据
机器学习是使用现有的数据对整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好分布估计。即使再增加小类样本数据时,又增加了大类样本数据。

2尝试其它评价指标
在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。例如混淆矩阵,精确度,召回率,F1 Score,ROC曲线.

3 对数据集进行重采样
对小类的数据样本进行采样来增加小类的数据样本个数,即过采样(over-sampling ,采样的个数大于该类样本的个数)。即添加部分样本的副本。
对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样(under-sampling,采样的次数少于该类样本的个素)。即删除部分样本。

4尝试产生人工数据样本
一种简单的人工样本数据产生的方法便是,对该类下的所有样本每个属性特征的取值空间中随机选取一个组成新的样本,即属性值随机采样。有一个系统的构造人工数据样本的方法SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本,即该算法构造的数据是新样本,原数据集中不存在的。

5 尝试不同的分类算法
应该使用不同的算法对其进行比较,因为不同的算法使用于不同的任务与数据。决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。

6尝试一个新的角度理解问题
我们可以从不同于分类的角度去解决数据不均衡性问题,我们可以把那些小类的样本作为异常点(outliers),因此该问题便转化为异常点检测。

当然还有很多其他的,由于知识有限有一些还不能理解,有待继续学习。

参考:https://blog.csdn.net/heyongluoyao8/article/details/49408131

7 sklearn参数

penalty:惩罚项,可选参数为l1和l2,默认为l2。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布。
dual:对偶或原始方法,默认为False。当样本数量>样本特征的时候,dual通常设置为False。
tol:停止求解的标准,float类型,默认为1e-4。
c:正则化系数λ的倒数,float类型,默认为1.0。越小的数值表示越强的正则化。
fit_intercept:是否存在截距或偏差,bool类型,默认为True。
intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
class_weight:用于标示分类模型中各种类型的权重,默认为不输入,也就是不考虑权重,即为None。
random_state:随机数种子,默认为无,仅在正则化优化算法为sag,liblinear时有用。
solver:优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga。默认为liblinear。可根据数据和分类具体情况选择。
max_iter:算法收敛最大迭代次数,默认为10。
multi_class:分类方式选择参数,可选参数为ovr和multinomial,默认为ovr。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
verbose:日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。

参考:
https://blog.csdn.net/jark_/article/details/78342644

谢谢阅读。