Logistic回归可用于二元分类问题和多元分类问题,二元分类中只有两个类别,而多元分类有三个或更多个类别

介绍

Logistic回归是一种常用的分类算法,用于解决二元分类和多元分类问题。在二元分类问题中,只有两个类别;而在多元分类问题中,有三个或更多个类别。Logistic回归通过将线性回归模型的输出通过一个sigmoid函数进行映射,从而将线性回归的输出转化为对应类别的概率。

算法原理

Logistic回归建立在线性回归模型的基础上,其输出经过一个sigmoid函数进行非线性映射,将结果限制在0和1之间。sigmoid函数在Logistic回归中被称为Logit函数,其形式为:
$$
\sigma(z) = \frac{1}{1 + e^{-z}}
$$
其中,$z$为线性回归模型的输出,可以看作对应类别的得分或概率。

Logistic回归假设输入特征和输出类别之间存在一种概率关系。若记输入特征为$x$,输出类别为$y$,则Logistic回归模型可以表示为:
$$
P(y=1|x) = \sigma(\theta^T x)
$$
其中,$\theta$为模型参数。

公式推导

假设训练数据集中有$m$个样本,特征维度为$n$,则记输入特征数据为$X$,输出类别为$Y$。对于二元分类问题,只有两个类别,可用0和1来表示。对于多元分类问题,将输出类别用独热编码进行表示。

对于Logistic回归,我们的目标是求解最优的模型参数$\theta$,使得给定输入特征下的模型预测概率与实际输出类别之间的差距最小化。为此,我们可以采用最大似然估计方法来推导损失函数。

对于二元分类问题,我们可以使用伯努利分布来建模输出的概率分布。我们假设每个样本的输出类别服从独立且相同的伯努利分布,其概率质量函数为:
$$
P(y|x) = P(y=1|x)^y \cdot (1 – P(y=1|x))^{(1-y)}
$$
其中,$P(y=1|x)$表示模型预测样本为类别1的概率。

对于多元分类问题,我们可以使用多项式分布来建模输出的概率分布。我们假设每个样本的输出类别服从独立且相同的多项式分布,其概率质量函数为:
$$
P(y|x) = \prod_{i=1}^{K} P(y=i|x)^{y_i}
$$
其中,$K$为类别的个数,$P(y=i|x)$表示模型预测样本为类别$i$的概率。

由于多项式分布中的各个类别的概率和为1,我们可以使用Softmax函数进行归一化,得到概率的输出结果。

最大似然估计的目标是最大化给定数据集的似然函数,即最大化所有样本的输出概率:
$$
L(\theta) = \prod_{i=1}^{m} P(y^{(i)}|x^{(i)})
$$
为了方便计算,我们可以取对数似然函数:
$$
l(\theta) = \log L(\theta) = \sum_{i=1}^{m}\log P(y^{(i)}|x^{(i)})
$$
最大化对数似然函数等价于最小化损失函数:
$$
J(\theta) = -\sum_{i=1}^{m}\log P(y^{(i)}|x^{(i)})
$$

对于二元分类问题,代入伯努利分布的概率质量函数并取负号,我们可以得到二元交叉熵损失函数:
$$
J(\theta) = -\sum_{i=1}^{m} [y^{(i)}\log P(y=1|x^{(i)}) + (1-y^{(i)})\log (1 – P(y=1|x^{(i)}))]
$$

对于多元分类问题,代入多项式分布的概率质量函数并取负号,我们可以得到多元交叉熵损失函数:
$$
J(\theta) = -\sum_{i=1}^{m} \sum_{k=1}^{K} y_k^{(i)} \log P(y=k|x^{(i)})
$$

通常情况下,我们采用梯度下降等优化算法来最小化损失函数。

计算步骤

  1. 初始化模型参数$\theta$。
  2. 根据给定的训练数据集,计算模型的输出概率$P(y|x)$。
  3. 使用损失函数计算模型的损失$J(\theta)$。
  4. 使用梯度下降等优化算法根据损失函数求解模型参数$\theta$。
  5. 重复步骤2-4,直到模型收敛或达到一定的迭代次数。

Python代码示例

下面是一个使用Logistic回归进行二元分类的Python代码示例,使用了Scikit-learn库中的鸢尾花数据集:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data[:, :2]
y = iris.target

# 使用Logistic回归进行二元分类
logreg = LogisticRegression(C=1e5, solver='lbfgs', multi_class='multinomial')
logreg.fit(X, y)

# 生成绘图所需的网格数据
h = .02
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

# 绘制决策边界
Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure(1, figsize=(6, 4))
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)

# 绘制训练数据集的散点图
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())

plt.show()

这段代码首先加载鸢尾花数据集,并取前两个特征作为输入特征X,取目标类别作为输出类别y。然后,通过LogisticRegression类进行模型训练。最后,利用网格数据和模型进行决策边界的绘制。

代码细节解释

上述代码中使用了LogisticRegression类来实现Logistic回归。在类的初始化过程中,我们可以设置不同的参数,例如正则化力度C、优化算法solver以及多类问题的处理方式multi_class

在模型训练过程中,我们使用训练数据集X和y调用fit方法,该方法将自动进行模型训练。

绘制决策边界的过程中,我们首先生成一组网格数据,再使用模型对每个网格点进行预测,得到对应的类别,最后将网格数据和类别结果绘制在图像上。

最后,显示绘制的图像并展示出来。

以上是Logistic回归用于二元分类问题的详细解决方案,涵盖了算法原理、公式推导、计算步骤、Python代码示例以及代码细节解释。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/824183/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球