机器学习

  • 1. Logistic回归
  • 1.1 原理
  • 1.2 sklearn实现


1. Logistic回归

1.1 原理

Logistic回归是一种分类算法,通过将线性回归预测值映射到{0, 1}之间实现预测值到概率的转换;即根据数据集对分类边界线建立回归公式,以此进行分类。

Logistic回归选择Sigmoid作为映射函数,其中Sigmoid函数及其导数如图:

logistic回归公式 logistic回归原理_机器学习

选择Sigmoid函数原因

  • 在(-logistic回归公式 logistic回归原理_logistic回归公式_02,+logistic回归公式 logistic回归原理_logistic回归公式_02)区间内单调递增,将所有预测值映射到(0, 1)区间,符合概率的转换
  • 在(-logistic回归公式 logistic回归原理_logistic回归公式_02,+logistic回归公式 logistic回归原理_logistic回归公式_02)区间内单调可微,便于求解

给定一个大小为logistic回归公式 logistic回归原理_机器学习_06的数据集:
logistic回归公式 logistic回归原理_logistic回归公式_07
则线性回归模型的预测值为:
logistic回归公式 logistic回归原理_sklearn_08

Logistic回归通过sigmoid函数将预测值映射到(0, 1)区间,即:
logistic回归公式 logistic回归原理_sklearn_09其中logistic回归公式 logistic回归原理_机器学习_10logistic回归公式 logistic回归原理_算法_11logistic回归公式 logistic回归原理_算法_12n为自变量(特征值)个数logistic回归公式 logistic回归原理_logistic回归公式_13 0或1(logistic回归公式 logistic回归原理_sklearn_14从1到logistic回归公式 logistic回归原理_机器学习_06)

Logistic回归是一种概率判别模型,可用最大似然估计(MLE)进行参数logistic回归公式 logistic回归原理_逻辑回归_16求解,其通过对数似然损失函数,定义如下:
logistic回归公式 logistic回归原理_logistic回归公式_17

首先logistic回归公式 logistic回归原理_sklearn_18关于logistic回归公式 logistic回归原理_逻辑回归_19求导:
logistic回归公式 logistic回归原理_logistic回归公式_20
logistic回归公式 logistic回归原理_sklearn_21关于logistic回归公式 logistic回归原理_逻辑回归_19求导:
logistic回归公式 logistic回归原理_机器学习_23

因为有非线性项位于求和符号内,所以对logistic回归公式 logistic回归原理_算法_24无法直接求解(无解析解)

:二分类Logistic回归是最大熵模型的特例,可将二分类的Logistic回归推广到一对多(one-vs-rest/all)分类或多分类的Logistic回归

1.2 sklearn实现

参考官方文档:点击查看

Logistic回归可通过sklearn库中linear_model下的LogisticRegression类实现

logistic回归公式 logistic回归原理_算法_25


有关参数

  • penalty:增加惩罚项,即L1正则化(‘l1’),L2正则化(‘l2’),同时考虑L1和L2正则化-弹性网络('elasticnet)或无(’none)
  • dual:是否转换为对偶问题
  • tol:求解过程中的残差(当小于该值时停止计算)
  • C:反向控制惩罚项的权重,数值越大,惩罚项权重越小
  • fit_intercept:是否计算回归模型的截距(常量),即logistic回归公式 logistic回归原理_sklearn_26
  • intercept_scaling:当求解器为’liblinear‘且需要计算模型截距时才用
  • class_weight:类别的权重
  • random_state:用于控制伪随机数生成器的种子,仅适用’sag’, ‘saga’和’liblinear’
  • solver:选择用于计算的求解器(’liblinear’,'lbfgs’等)
  • max_iter:最大迭代次数
  • multi_class:选择分类方式,即one-vs-rest(拆解成多个二分类)或多项式
  • verbose:对于’liblinear’和‘lbfgs’求解器设置输出日志的详细程度
  • warm_start:是否使用上一次计算结果来初始化
  • n_jobs:分类并行化时使用的CPU内核数
  • l1_ratio:设置弹性网络中L1正则项的比例

有关属性

logistic回归公式 logistic回归原理_逻辑回归_27

  • classes_:模型已知的类别标签列表
  • coef_:Logistic回归系数,即logistic回归公式 logistic回归原理_sklearn_28
  • intercept_:Logistic回归模型的截距(常量),即logistic回归公式 logistic回归原理_sklearn_26
  • n_features_in_:自变量(特征值)的个数
  • feature_names_in_:自变量的名称,仅当输入自变量有(字符)名称时可用
  • n_iter_:所有类满足残差要求时的迭代次数

有关方法

logistic回归公式 logistic回归原理_算法_30

  • decision_function:预测样本到分类超平面的(带符号)距离,即置信度水平
  • densify:将回归系数矩阵转化为密集数组形式
  • fit:拟合Logistic回归模型,即计算logistic回归公式 logistic回归原理_sklearn_31
  • get_params:获取对应模型参数
  • predict:预测类别
  • predict_log_proba:预测概率的对数
  • predict_proba:预测概率
  • score:获取给定数据集的平均准确度
  • set_params:设置对应模型参数
  • sparsify:将回归系数矩阵转化为稀疏形式

使用案例

>>> import numpy as np
>>> from sklearn import linear_model

>>> reg = linear_model.LogisticRegression(penalty='none') #实例化Logistic回归模型对象
>>> X = np.array([[1, 1], [3, 2], [4, 7], [2, 5]]) #数据
>>> y = np.array([1, 1, 0, 0]) #类别
>>> reg.fit(X, y) #拟合求解
>>> reg.coef_
[[9.22...,-8.14...]]
>>> reg.intercept_
[9.10...]
>>> reg.classes_
[0, 1]
>>> reg.n_features_in_
2
>>> reg.decision_function([[1, 2]])
[2.03...]
>>> reg.predict_proba(X)
[[0.00..., 0.99...], [0.00..., 1.00...],
 [0.99..., 0.00...], [1.00..., 0.00...]]
>>> reg.predict([[1, 3], [5, 2]])
[0, 1]
>>> reg.score(X, y)
1.0