初级算法梳理之二
初级算法梳理之二
初级算法梳理之任务二:逻辑回归算法梳理
时间匆匆,贵在坚持啊。
忙着考研调剂,忙着毕设论文,总觉得考研的过程学的东西,在浪费时间;也会觉得毕设论文,为了备考,也选了个简单的,依旧觉得浪费着时间。
在能够为喜欢的东西坚持花上一些时间,就会觉得很值得。希望忙完后,能为自己喜欢的忙,能为自己认为值得的东西忙活。
学习内容
1、逻辑回归与线性回归的联系与区别
2、逻辑回归的原理
3、逻辑回归损失函数推导及优化
4、正则化与模型评估指标
5、逻辑回归的优缺点
6、样本不均衡问题解决办法
7、sklearn参数
1、逻辑回归与线性回归的联系与区别
逻辑回归:逻辑回归(LogisticRegression)又称对数几率回归,是一种广义的线性回归分析模型。广义线性模型(generalized linear model) 是在普通线性模型的基础上,对其进行推广而得出的应用范围更广,更具实用性的回归模型。
“回归”一般是用于预测样本的值,这个值通常是连续的。但是受限于其连续的特性,一般用它来进行分类的效果往往很不理想。为了保留线性回归“简单效果有不错”的特点,又想让它能够进行分类,因此需要对预测值再做一次处理。这个多出来的处理过程,就是GLM所做的最主要的事。而处理过程的这个函数,我们把它叫做连接函数。
当一个处理样本的回归模型是线性模型,且连接函数满足一定特性(特性下面说明)时,我们把模型叫做广义线性模型。(特殊的,当连接函数是 f(x)=x 时,其实就是线性回归。)
联系:逻辑回归与线性回归同属于广义线性模型,模型形式相似,只是其连接函数不同。
区别:
1)线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。
2)线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量。
3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系
4)logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系
2、逻辑回归的原理
虽然叫做逻辑回归,但是该算法是分类算法,逻辑回归用了和回归类似的方法来解决分类问题。线性回归模型产生的预测值是实值y_hat,而考虑二分类问题,输出标记y∈{0,1},可以把线性回归产生的预测值y_hat转化成0/1值,找到一个单调可微函数将分类任务的预测值y_hat转化成0和1。对数几率函数即“sigmoid"函数,可以讲预测值y_hat转化为一个接近0或1的y_p概率值。
Logistic回归是对特征(feature)做加权相加后,输入给Sigmoid函数,用Sigmoid函数的输出来确定二分类的结果。
其中的logistic就是sigmoid函数,因为它也叫logistic函数。它与logit函数互为反函数。
其中的回归在这里的含义可以理解为最佳拟合,表示要找到最佳拟合参数集用于对特征加权。训练分类器就是用最优化方法去寻找最佳拟合参数。
3、逻辑回归损失函数推导及优化
y = 1 时:-log§ ∈(+,0] ,如果给定样本真值y = 1,估计出来的p值越小,越倾向于将预估值y分类为0,估计错误,损失越大。
y = 0 时:-log(1-p)∈[0,+),如果给定样本真值y = 0,估计出来的p值越大,越倾向于将预估值y分类为1,估计错误,损失越大。
4、正则化与模型评估指标
正则化: 为防止过拟合,提升模型泛化能力,我们需要对所有特征参数(除θ0θ0外)进行惩罚,即保留所有特征,减小参数θθ的值,当我们拥有很多不太有用的特征时,正则化会起到很好的作用。一般我们不知道是哪个参数导致过拟合,所以我们惩罚所有的参数。
5、逻辑回归的优缺点
优点:
1)适合需要得到一个分类概率的场景。
2)计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。
3)LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。)
缺点:
1)容易欠拟合,分类精度不高。
2)数据特征有缺失或者特征空间很大时表现效果并不好。
6、样本不均衡问题解决办法
1)扩大数据集
2)尝试增加其他评价指标F1/Recall/Kappa/ROC
3)重采样(上采样、下采样)
4)其他分类模型
5)增加惩罚项
7、sklearn参数
fix(X,y[,sample_weight]):训练模型。
predict(X):用模型进行预测,返回预测值。
score(X,y[,sample_weight]):返回(X,y)上的预测准确率(accuracy)。
predict_log_proba(X):返回一个数组,数组的元素一次是 X 预测为各个类别的概率的对数值。
predict_proba(X):返回一个数组,数组元素一次是 X 预测为各个类别的概率的概率值。
sparsify():将系数矩阵转换为稀疏格式。
set_params(** params):设置此估计器的参数。
decision_function(X):预测样本的置信度分数。
densify():将系数矩阵转换为密集阵列格式。
PS:算法之路没有尽头,加油吧少年们!!!