逻辑回归

  • 0. 本质和概述
  • 本质:y 表达了正例的可能性
  • 概念/术语
  • 1. 假设函数
  • 建模过程:用对数几率去拟合一条线性回归线
  • 逻辑回归模型
  • 2. 损失函数
  • 3. 优化算法
  • 3.1 极大似如估计:去求解概率函数的极大值
  • 3.2 梯度下降法:求解极大值
  • 4. 代码实例
  • 4.1 一维(特征)数据
  • 4.2 二维数据
  • Softmax回归


逻辑回归类似于多元线性回归,只是结果是二元的。它使用多种变换将问题转换成可以拟合线性模型的问题。更准确地说,逻辑回归也是一种线性模型 y = wTx,为了解决分类问题而引入了一个非线性的决策函数g(·),用来将输出由实数变为离散标签—— LR 选择的是Sigmoid 函数,即 y = Sigmoid(wTx)。

0. 本质和概述

本质:y 表达了正例的可能性

利用 y = wTx + b 对新样本 x 进行分类,并用预测出的 y 值与一个阈值进行比较
例如通常在 y > 0.5(1-y < 0.5)时判别为正例,否则为反例。

核心:直接从样本估计出它属于正负样本的概率

Logistic 回归 或者叫 逻辑回归 虽然名字有回归,但是它是用来做分类的。其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式,以此进行分类

二元逻辑回归中的p交互作用 二元逻辑回归方程_拟合

概念/术语

  • Logistic 函数
    一种能将属于某个类的概率映射到 ±∞ 范围上(而不是 0 到 1 之间)的函数。(注意并不是最终的比例)
    Logistic 函数 = 对数几率函数
  • 几率
    “成功”(1)与“不成功”(0)之间的比率。
  • 结果变量:标签是 1 的概率 p(而不是简单二元标签)
    结果变量 = 变量 y

1. 假设函数

建模过程:用对数几率去拟合一条线性回归线

首先,我们不能将结果变量简单看作二元标签,而应视为标签是 1 的概率 p

若直接建模,并不能确保概率 p 位于 [0, 1] 区间内:

二元逻辑回归中的p交互作用 二元逻辑回归方程_拟合_02


下面换一种做法。我们通过在预测因子中应用逻辑响应函数(逆逻辑回归函数)去建模p:

二元逻辑回归中的p交互作用 二元逻辑回归方程_建模_03


这一转换确保了 p 值位于 [0, 1] 区间内。注意:

二元逻辑回归中的p交互作用 二元逻辑回归方程_数据_04


对等式两端取对数,得:

二元逻辑回归中的p交互作用 二元逻辑回归方程_二元逻辑回归中的p交互作用_05


对数几率函数也称Logistic函数。

完成这样的转换过程后,我们就可以使用线性模型去预测概率。

逻辑回归模型

  • 线性回归模型的模型
  • Sigmoid函数
    逻辑回归的模型定义(需要借助Sigmoid函数):
  • 逻辑回归的模型
  • 逻辑回归的模型的预测

假定上个表达式是等于类 1 的概率,自然等于类 0 的概率等于1减去等于类 1 的概率。

二元逻辑回归中的p交互作用 二元逻辑回归方程_数据_06


就是将上面两个式子整合为下面一个公式:

二元逻辑回归中的p交互作用 二元逻辑回归方程_数据_07

2. 损失函数

先求出由所有样本组成的似然函数,转化为对数似然,转化为梯度下降,根据梯度下降的方向更新迭代权重参数,选取代价函数本次与上次的差小于某个阈值的迭代思路。

  • 似然函数

    m表示样本个数。

对数似然如下:

二元逻辑回归中的p交互作用 二元逻辑回归方程_数据_08

然后,利用对数极大似然估计,即求上式的极大值,引入因子 -1/m,转化为求下式的极小值:

二元逻辑回归中的p交互作用 二元逻辑回归方程_二元逻辑回归中的p交互作用_09


即为逻辑回归代价函数(log损失函数)

3. 优化算法

逻辑回归代价函数没有已知的闭式方程(不存在一个标准方程的等价方程)来计算出最小化成本函数的θ值。但是,这是个凸函数,所以通过梯度下降(或是其他任意优化算法)保证能够找出全局最小值。

3.1 极大似如估计:去求解概率函数的极大值

L(θ) 就是 LR 的似然函数。我们要让它达到最大,也就是对其进行“极大估计”。因此,求解 LR 目标函数的过程,就是对 LR 模型函数进行极大似然估计的过程。

l(θ) 其实可以作为 LR 的目标函数。前面讲过,我们需要目标函数是一个凸函数,具备最小值。因此我们设定:J(θ)=−l(θ)。

这样,求 l(θ) 的最大值就成了求 J(θ) 的最小值。J(θ) 又叫做负对数似然函数。它就是 LR 的目标函数。

3.2 梯度下降法:求解极大值

二元逻辑回归中的p交互作用 二元逻辑回归方程_拟合_10

4. 代码实例

4.1 一维(特征)数据

import matplotlib.pyplot as plt
import numpy as np 

from sklearn import datasets
from sklearn.linear_model import LogisticRegression
iris = datasets.load_iris()

list(iris.keys())
# 我们试试仅基于花瓣宽度这一个特征,创建一个分类器来检测Virginica鸢尾花。

X = iris["data"][:, 3:] # petal width
y = (iris["target"] == 2).astype(np.int) # 1 if Iris-Virginica, else 0
log_reg = LogisticRegression()

log_reg.fit(X, y)
X_new = np.linspace(0, 3, 1000).reshape(-1, 1)

y_proba = log_reg.predict_proba(X_new)

y_proba
plt.scatter(X, y)

plt.plot(X_new, y_proba)

# plt.plot(X_new, y_proba[:, 1], "g-", label="Iris-Virginica")

# plt.plot(X_new, y_proba[:, 0], "b--", label="Not Iris-Virginica")

二元逻辑回归中的p交互作用 二元逻辑回归方程_二元逻辑回归中的p交互作用_11


注意,这里有一部分重叠。在大约1.6厘米处存在一个决策边界,这里“是”和“不是”的可能性都是50%

4.2 二维数据

  • 导入模块
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns; sns.set()

from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
  • 准备数据
X, y = make_blobs(n_samples=100, centers=2, 
                       cluster_std=0.60, random_state=0)
 
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')

二元逻辑回归中的p交互作用 二元逻辑回归方程_拟合_12

  • 拟合数据
logistic_model = LogisticRegression() 
logistic_model.fit(X, y)
  • 预测数据
# 产生新(二维)数据 

rng = np.random.RandomState(0)
X_new = [-1, -1] + [5, 7] * rng.rand(2000, 2)
print(X_new.shape)
print(X_new[0:3, :])

plt.scatter(X_new[:, 0], X_new[:, 1], s=10) 

(2000, 2)
[[1.74406752 4.00632556]
 [2.01381688 2.81418228]
 [1.118274   3.52125879]]

新数据:

二元逻辑回归中的p交互作用 二元逻辑回归方程_二元逻辑回归中的p交互作用_13

  • 预测
y_pred = logistic_model.predict(X_new)
print(y_pred.shape) 
print(y_pred[0:3])

(2000,)
[0 1 0]
  • 可视化逻辑回归训练结果
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis') 
plt.scatter(X_new[:, 0], X_new[:, 1], c=y_pred, s=5, alpha=0.5)

二元逻辑回归中的p交互作用 二元逻辑回归方程_二元逻辑回归中的p交互作用_14


可以清晰地看出模型的预测结果

(相对于可视化决策边界更加直观)

附:也可以使用 plt 的 pcolormesh() 函数进行绘制分类图(根据y的取值画上不同的颜色)
逻辑回归介绍利用plt.pcolormesh绘制分类图

Softmax回归

逻辑回归模型经过推广,可以直接支持多个类别,而不需要训练并组合多个二元分类器。这就是Softmax回归,或者叫多元逻辑回归。

参考

  1. 逻辑回归——非线性逻辑函数的由来
  2. 逻辑回归——用来做分类的回归模型
  3. 《机器学习实战基于scikitlearn和tensorflow》
  4. 一句话+一张图说清楚 Logistic回归 算法