逻辑回归定义:

逻辑回归是一种解决二分类(0 or 1)问题的机器学习方法,用于估算某种事物的可能性。

逻辑回归和线性回归的关系

联系
  1. 都是广义线性回归模型(generalized linear model)
  2. 逻辑回归去掉Sigmoid映射函数的话,就算是一个线性回归。
区别

线性回归得到的是一个连续的结果,而逻辑回归得到的是一个离散的结果。

优缺点

优点
  1. 高效,不需要太大的计算量,又通俗易懂,不需要缩放输入特征,不需要任何调整,且又很容易调整,并且输出校准好的预测概率。
  2. 非常容易实现,且训练很高效
  3. 可以用它作为一个很好的基准,用来衡量其他更复杂的算法。
缺点
  1. 不能解决非线性问题(或者说解决起来很困难,至少我现在不会,太菜),因为它的决策边界是线性的。
  2. 高度依赖正确的数据表示,所以在确定所有的重要变量之前不会成为一个有用的工具。
  3. 只能预测分类结果
  4. 容易过拟合

原理

逻辑回归模型是广义线性回归模型的拓展。
广义线性模型如下:
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_逻辑回归算法的优点 鲁棒性
其中的函数逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_线性回归_02称为 “ 联系函数 ” ,且是连续和充分光滑的。
逻辑回归的功能是实现二分类,但是一般的线性回归输出的是一个连续的值,所以要想输出离散的结果,就必须引入一个联系函数能够将实值转化为{0,1},最理想的是 “单位阶跃函数”,但是阶跃函数不是连续的,所以就需要找一个替代函数,而Sigmoid函数非常适合:
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_算法_03

结合广义线性模型,我们可以得到:
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_算法_04
但Sigmoid函数只能将实值转化到0到1之间,并不能直接得到0和1两个离散的值,所以这里引入了条件概率,来实现分类的目的。假如我们设
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_阶跃函数_05
来表示输入一组特征样本返回的是正例的概率,那么就有
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_算法_06
现在假设有N个样本逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_阶跃函数_07,那么每个样本出现的概率就为
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_逻辑回归_08
则所有样本出现的概率的对数形式为
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_逻辑回归算法的优点 鲁棒性_09
由最大似然估计可知,逻辑回归的损失函数
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_逻辑回归_10
我们可以用梯度下降法、牛顿法来求解损失函数,得到参数。

正则化

当模型参数过多时,容易遇到过拟合问题,因此可以在优化目标中加入正则项来控制模型的复杂度,通过惩罚过大的参数来防止过拟合。
引入正则项的LR目标函数
逻辑回归算法的优点 鲁棒性 逻辑回归算法的缺点_算法_11
p一般取1或2,分别对应L1,L2正则化。
L1正则化倾向于使参数变为0,因此能产生稀疏解,可以用来特征选择。

模型评估指标

常见的分类指标有准确率召回率ROC曲线等,通常用准确率作为一般评估标准,但这个标准的默认假设前提是数据是平衡的,正例、反例的重要性一样,二分类器的阈值是0.5

样本不均衡问题及其解决方法

  1. 不平衡的类分布(imbalanced class distribution)的定义:
      属于某一类别的观测样本的数量显著少于其他类别。
  2. 发生原因
    机器学习算法通常被设计成通过减少误差来提高准确率。
  3. 处理不平衡数据集的方法
    数据层面:随机重采样、随机过采样、基于聚类的过采样、信息性过采样、改进的合成少数类过采样技术
    算法集成技术:基于Bagging方法、基于Boosting方法、自适应boosting-Ada Boost、梯度树、XGBoost

Sklearn库参数略谈

from sklearn.linear_model import LogisticRegression
modelLR=LogisticRegression()
modelLR.fit(X_train,Y_train)  #拟合
modelLR.score(X_test,Y_test)  #模型得分(准确率)
modelLR.predict_proba(data) #预测分类为0和1的概率
modelLR.predict(data)  #预测是为正例还是反例。
b=modelLR.coef_    #逻辑回归模型的系数
a=modelLR.intercept_    #逻辑回归模型的截距
from sklearn.metrics import confusion_matrix
confusion_matrix(test_y.astype(str),pred_y.astype(str))   #得到混淆矩阵
from sklearn.metrics import roc_curve,auc
fpr,tpr,threshold = roc_curve(test_y,pred_y)    #计算真正率,假正率
roc_auc=auc(fpr,tpr) #计算AUC值

参考资料

  1. 机器学习之利用Python进行逻辑回归分析
  2. 逻辑回归(LR)个人学习总结篇
  3. 机器学习算法之逻辑回归
  4. 西瓜书 ——周志华
  5. 逻辑回归(Logistic Regression)(一)
  6. 从原理到应用:简述Logistics回归算法
  7. 【机器学习算法系列之二】浅析Logistic Regression
  8. 如何处理数据中的「类别不平衡」?
  9. 从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
  10. 样本不平衡总结
  11. 李航统计学习方法