Hi,我是Johngo~
昨天,咱们分享了关于SVM的一些核心点,大家感兴趣可以看看昨天的文章。
今天继续会把逻辑回归的核心点和大家进行分享。
很多人都提到了这一句,逻辑回归,虽然名字里有“回归”,但逻辑回归实际上是用于解决二分类(binary classification)问题的分类算法。它通过一个逻辑函数(sigmoid函数)将线性回归的输出值映射到一个(0, 1)之间的概率值,从而实现分类任务。
逻辑回归的基本模型形式是:
其中, 是预测结果的概率值, 是特征值, 是需要学习的模型参数。
逻辑回归使用的是Sigmoid函数,它的公式为:
该函数将任意实数值映射到 (0, 1) 之间。
当 Sigmoid 函数的输出值大于0.5时,预测类别为1,否则预测类别为0。可以通过调整决策边界来改变分类的灵敏度。
这里,咱们从模型训练角度再谈一谈:
逻辑回归通常使用对数损失(Log Loss)作为损失函数:
其中, 是样本数量, 是模型对第 个样本的预测概率。
通过梯度下降法(Gradient Descent)来优化模型参数,使损失函数最小化。
逻辑回归的核心逻辑在于将线性回归的输出映射到一个概率值,从而能够解决二分类问题。这一核心逻辑的实现依赖于逻辑函数(sigmoid函数),并通过最大似然估计(Maximum Likelihood Estimation, MLE)来估计模型参数。
1. 模型假设
假设输入特征向量为 ,模型参数为 。逻辑回归模型的假设是通过一个线性模型加权求和得到的:
然后通过sigmoid函数将线性模型的输出映射到一个 (0, 1) 之间的概率值:
2. 目标函数
为了估计模型参数 ,我们需要定义一个目标函数。逻辑回归使用的是对数似然函数。
对于二分类问题,输出 取值为0或1。样本的预测概率为 ,则其对数似然函数为:
对整个训练集 (其中 是样本数量)取对数似然函数的总和,得到总的对数似然函数:
3. 最大化对数似然函数
为了得到参数 的估计值,我们需要最大化对数似然函数 。通常使用负对数似然函数(即损失函数)来简化计算:
4. 梯度下降法
通过梯度下降法,我们可以迭代地更新参数 以最小化损失函数 。梯度下降的更新规则为:
其中, 是学习率, 是损失函数关于参数 的偏导数。
对于逻辑回归,损失函数的偏导数为:
将其代入更新规则中,得到:
5. 迭代更新
我们反复迭代上述更新步骤,直到损失函数收敛,得到最终的参数 估计值。
6. 分类决策
最终,模型的分类决策是基于预测概率 来做出的。通常,如果预测概率大于0.5,则分类为1,否则分类为0:
通过上述步骤和公式推导,我们可以完整地理解逻辑回归的核心逻辑及其实现过程。
逻辑回归的Python实现可以通过scikit-learn
库来实现。
下面,使用逻辑回归进行分类的示例,并绘制一个三维图形来说明逻辑回归模型的决策边界。
首先,需要导入相关库,生成一个三维数据集,然后训练逻辑回归模型。最后,我们将绘制决策边界和数据点。
1. 导入库
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
2. 生成数据集
# 生成一个三维的二分类数据集
X, y = make_classification(n_samples=100, n_features=3, n_informative=3, n_redundant=0, n_clusters_per_class=1)
# 将数据分为两类
class_0 = X[y == 0]
class_1 = X[y == 1]
3. 训练逻辑回归模型
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X, y)
4. 绘制三维图形和决策边界
# 创建三维图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制数据点
ax.scatter(class_0[:, 0], class_0[:, 1], class_0[:, 2], color='blue', label='Class 0')
ax.scatter(class_1[:, 0], class_1[:, 1], class_1[:, 2], color='red', label='Class 1')
# 创建一个网格来绘制决策边界
xx, yy = np.meshgrid(np.linspace(X[:, 0].min(), X[:, 0].max(), 50),
np.linspace(X[:, 1].min(), X[:, 1].max(), 50))
zz = -(model.intercept_ + model.coef_[0][0] * xx + model.coef_[0][1] * yy) / model.coef_[0][2]
# 绘制决策边界
ax.plot_surface(xx, yy, zz, alpha=0.5, rstride=100, cstride=100, color='green')
# 设置图形标签
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_zlabel('Feature 3')
ax.legend()
plt.show()
大家注意其中最重要的三点即可~
make_classification
生成一个包含三维特征的二分类数据集。LogisticRegression
训练逻辑回归模型。mpl_toolkits.mplot3d
中的Axes3D
创建三维图形。scatter
方法绘制数据点,分别用蓝色和红色表示两个类别。plot_surface
方法绘制决策边界。三维图形展示了逻辑回归模型在三维特征空间中的分类效果。绿色平面是决策边界,它将特征空间划分为两部分,分别对应于模型预测的两个类别。图中的数据点则表示实际的样本点,模型根据这些点的位置和决策边界来进行分类。通过这种可视化方法,大家可以直观地理解逻辑回归模型在三维空间中的分类原理。