数学建模学习-逻辑回归(Logistic Regression)教程(22)

数学建模学习-逻辑回归(Logistic Regression)教程(22)

写在最前

注意本文的相关代码及例子为同学们提供参考,借鉴相关结构,在这里举一些通俗易懂的例子,方便同学们根据实际情况修改代码,很多同学私信反映能否添加一些可视化,这里每篇教程都尽可能增加一些可视化方便同学理解,但具体使用时,同学们要根据实际情况选择是否在论文中添加可视化图片。

系列教程计划持续更新,同学们可以免费订阅专栏,内容充足后专栏可能付费,提前订阅的同学可以免费阅读,同时相关代码获取可以关注博主评论或私信。

目录

  1. 算法简介
  2. 算法特点
  3. 数学原理
  4. 代码实现
  5. 实例分析
  6. 结果分析
  7. 总结

算法简介

逻辑回归(Logistic Regression)是一种常用的统计学习方法,主要用于解决分类问题。尽管其名字中带有"回归",但它实际上是一种分类方法。逻辑回归通过建立一个逻辑函数(sigmoid函数)将线性回归模型的输出映射到[0,1]区间,从而实现二分类。

算法特点

  1. 简单直观:模型结构简单,易于理解和实现
  2. 可解释性强:模型参数具有明确的统计学解释
  3. 计算效率高:训练速度快,适合大规模数据
  4. 输出概率:不仅给出分类结果,还能输出概率值
  5. 适用广泛:在医疗诊断、金融风控等领域应用广泛
  6. 易于正则化:可以方便地添加正则化项防止过拟合

数学原理

逻辑回归的核心是sigmoid函数:

σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1

其中z是线性函数:

z = w 0 + w 1 x 1 + w 2 x 2 + . . . + w n x n = w T x + b z = w_0 + w_1x_1 + w_2x_2 + ... + w_nx_n = w^Tx + b z=w0+w1x1+w2x2+...+wnxn=wTx+b

逻辑回归的损失函数(对数似然损失):

J ( w ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h w ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h w ( x ( i ) ) ) ] J(w) = -\frac{1}{m}\sum_{i=1}^m[y^{(i)}\log(h_w(x^{(i)})) + (1-y^{(i)})\log(1-h_w(x^{(i)}))] J(w)=m1i=1m[y(i)log(hw(x(i)))+(1y(i))log(1hw(x(i)))]

其中:

  • m是样本数量
  • y^(i)是第i个样本的真实标签
  • h_w(x^(i))是模型对第i个样本的预测概率

代码实现

环境准备

首先需要安装必要的Python库:

# requirements.txt
numpy>=1.21.0
matplotlib>=3.4.3
scikit-learn>=0.24.2

数据准备

我们使用sklearn的make_classification函数生成示例数据:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 生成示例数据
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, 
                         n_informative=2, random_state=1, 
                         n_clusters_per_class=1)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

模型训练

使用sklearn的LogisticRegression类实现模型训练:

from sklearn.linear_model import LogisticRegression

# 创建并训练模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 在测试集上评估
accuracy = model.score(X_test, y_test)
print(f"模型准确率: {accuracy:.4f}")

可视化分析

  1. 决策边界可视化:
# 创建网格点以绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),
                     np.arange(y_min, y_max, 0.1))

# 预测网格点的类别
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 绘制决策边界和数据点
plt.figure(figsize=(10, 8))
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)

在这里插入图片描述

  1. ROC曲线分析:
from sklearn.metrics import roc_curve, auc

# 计算ROC曲线
y_pred_proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label=f'ROC曲线 (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], 'k--')

在这里插入图片描述

  1. 模型收敛过程:
# 计算不同迭代次数下的损失函数值
max_iter_range = range(1, 101, 10)
loss_values = []

for n_iter in max_iter_range:
    model_temp = LogisticRegression(max_iter=n_iter)
    model_temp.fit(X_train, y_train)
    loss = -model_temp.score(X_train, y_train)
    loss_values.append(loss)

在这里插入图片描述

实例分析

在本例中,我们生成了一个二分类数据集,包含100个样本,每个样本有2个特征。通过可视化决策边界,我们可以清晰地看到模型是如何将两个类别分开的。模型在测试集上达到了100%的准确率,这表明对于这个简单的数据集,逻辑回归模型表现出色。

从ROC曲线可以看出,模型的AUC值接近1,说明模型具有很好的分类性能。收敛过程图显示了模型在训练过程中损失函数的变化,我们可以看到损失函数随着迭代次数的增加而逐渐减小,最终趋于稳定。

结果分析

  1. 模型参数

    • 截距(bias):-0.2712
    • 特征系数:[-3.03383954, 0.09429485]
    • 这些参数反映了每个特征对分类结果的影响程度
  2. 模型性能

    • 准确率:100%
    • AUC值:1.00
    • 这表明模型在这个简单的二分类问题上表现完美
  3. 决策边界

    • 从决策边界图可以看出,模型成功地找到了一个清晰的分界线
    • 两个类别的样本被很好地分开
  4. 收敛性能

    • 模型在较少的迭代次数内就达到了收敛
    • 损失函数呈现平滑的下降趋势

总结

逻辑回归是一个简单但强大的分类算法,特别适合二分类问题。它的主要优势在于:

  1. 模型简单,训练速度快
  2. 可解释性强,每个特征的重要性可以通过系数大小直观理解
  3. 不容易过拟合,泛化能力较好
  4. 可以输出概率值,便于进行风险控制

在实际应用中,逻辑回归常用于:

  • 医疗诊断(疾病预测)
  • 金融风控(信用评估)
  • 市场营销(用户购买预测)
  • 垃圾邮件分类等场景

需要注意的是,逻辑回归也有其局限性:

  1. 只能处理线性可分的问题
  2. 对特征之间的关系建模能力有限
  3. 对异常值比较敏感

在实际应用中,我们可以通过特征工程、正则化等方法来改善模型性能。同时,也可以考虑使用核方法将逻辑回归扩展到非线性问题。

同学们如果有疑问可以私信答疑,如果有讲的不好的地方或可以改善的地方可以一起交流,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值