云计算百科
云计算领域专业知识百科平台

《深度学习》期末练习题 | 程序题第1篇:线性回归与逻辑回归实战

《深度学习》期末练习题 | 程序题第1篇:线性回归与逻辑回归实战

在这里插入图片描述

下一篇:《深度学习》期末练习题 | 程序题第2篇 —— PyTorch Tensor 基本创建、运算与自动微分

摘要:本文是《深度学习》期末复习系列的第一篇,聚焦于机器学习中最基础也最重要的两个算法——线性回归和逻辑回归。通过房屋单价预测和鸢尾花分类两个经典案例,手把手带你掌握 sklearn 建模全流程。代码可直接运行,适合期末考试复习与入门实践。


📌 目录

  • 线性回归:房屋单价预测
  • 逻辑回归:鸢尾花分类
  • 核心知识点总结
  • 常见考试陷阱与注意事项

  • 1. 线性回归:房屋单价预测

    1.1 问题描述

    已知一组房屋面积与对应单价的数据,要求建立一元线性回归模型,并预测面积为 700 平方米的房屋单价。

    1.2 完整代码

    import numpy as np
    from sklearn.linear_model import LinearRegression

    # ========== 1. 准备数据 ==========
    X = np.array([150, 200, 250, 300, 350, 400, 600]).reshape(–1, 1) # 房屋面积(特征)
    y = np.array([6450, 7450, 8450, 9450, 11450, 15450, 18450]) # 房屋单价(标签)

    # ========== 2. 创建并训练模型 ==========
    model = LinearRegression() # 创建线性回归模型
    model.fit(X, y) # 训练模型

    # ========== 3. 获取模型参数 ==========
    w = model.coef_ # 回归系数(斜率)
    b = model.intercept_ # 截距
    print(f"回归方程: y = {w[0]:.2f} * x + {b:.2f}")

    # ========== 4. 预测 ==========
    pred = model.predict([[700]]) # 注意:输入必须是二维数组
    print("预测单价:", pred[0])

    1.3 关键解析

    要点说明
    reshape(-1, 1) sklearn 要求特征矩阵为 2D 数组,一维数组必须转换
    model.coef_ 返回数组,即使是一元回归也是 [w] 形式
    model.predict([[700]]) 预测输入同样需要 二维数组,[[700]] 表示1个样本、1个特征
    损失函数 最小二乘法(OLS),最小化残差平方和

    1.4 运行结果示例

    回归方程: y = 26.43 * x + 2521.43
    预测单价: 21022.43

    💡 考试提示:如果题目要求手写梯度下降而非调用 sklearn,需记住参数更新公式:

    w

    :

    =

    w

    −

    α

    ⋅

    1

    m

    ∑

    i

    =

    1

    m

    (

    h

    w

    (

    x

    (

    i

    )

    )

    −

    y

    (

    i

    )

    )

    ⋅

    x

    (

    i

    )

    w := w – \\alpha \\cdot \\frac{1}{m}\\sum_{i=1}^{m}(h_w(x^{(i)}) – y^{(i)}) \\cdot x^{(i)}

    w:=w−α⋅m1​i=1∑m​(hw​(x(i))−y(i))⋅x(i)


    2. 逻辑回归:鸢尾花分类

    2.1 问题描述

    使用 sklearn 内置的 Iris 鸢尾花数据集,训练逻辑回归分类器,在测试集上评估准确率。

    2.2 完整代码

    import numpy as np
    from sklearn import datasets, linear_model
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score

    # ========== 1. 加载数据 ==========
    iris = datasets.load_iris()
    X = iris.data # (150, 4) 四个特征
    y = iris.target # (150,) 三分类标签: 0, 1, 2

    # ========== 2. 划分训练集/测试集 ==========
    X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42 # 建议固定随机种子保证可复现
    )

    # ========== 3. 训练逻辑回归模型 ==========
    model = linear_model.LogisticRegression(C=1e5) # C越大正则化越弱
    model.fit(X_train, y_train)

    # ========== 4. 预测与评估 ==========
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)

    print("模型在测试集上的准确率:", accuracy)

    2.3 关键解析

    要点说明
    LogisticRegression(C=1e5) C 是正则化强度的倒数,C=1e5 ≈ 无正则化,等价于标准逻辑回归
    test_size=0.2 80% 训练 / 20% 测试,这是最常用的划分比例
    random_state=42 强烈建议加上,否则每次运行结果不同,调试困难
    多分类策略 sklearn 默认使用 OvR(One-vs-Rest),也可设置 multi_class='multinomial'
    输出范围 逻辑回归输出经过 Sigmoid/Softmax,值域为 (0, 1),天然适合概率解释

    2.4 运行结果示例

    模型在测试集上的准确率: 1.0

    ⚠️ 注意:鸢尾花数据集较小且 separable,准确率可能达到 100%。在实际考试中若数据更复杂,准确率通常在 85%-95% 之间。


    3. 核心知识点总结

    线性回归 vs 逻辑回归对比

    维度线性回归逻辑回归
    任务类型 回归(连续值预测) 分类(离散类别预测)
    激活函数 无 Sigmoid(二分类)/ Softmax(多分类)
    损失函数 MSE(均方误差) Cross-Entropy(交叉熵)
    输出范围

    (

    −

    ∞

    ,

    +

    ∞

    )

    (-\\infty, +\\infty)

    (−∞,+∞)

    (

    0

    ,

    1

    )

    (0, 1)

    (0,1)

    sklearn 类 LinearRegression LogisticRegression
    正则化 需用 Ridge/Lasso 内置 L2 正则(由 C 控制)

    sklearn 建模四步法(万能模板)

    ① 准备数据 → ② 创建模型 → ③ fit 训练 → ④ predict 预测 / score 评估

    🎯 这个模板适用于 sklearn 中几乎所有监督学习算法,务必牢记!


    4. 常见考试陷阱与注意事项

    ❌ 陷阱1:忘记 reshape

    # 错误写法
    X = np.array([150, 200, 250])
    model.fit(X, y) # ValueError!

    # 正确写法
    X = np.array([150, 200, 250]).reshape(–1, 1)

    ❌ 陷阱2:predict 传入一维数组

    # 错误
    model.predict([700])

    # 正确
    model.predict([[700]])

    ❌ 陷阱3:混淆 coef_ 和 intercept_

    • coef_ → 权重/斜率(可能有多个)
    • intercept_ → 偏置/截距(标量或数组)

    ❌ 陷阱4:未划分测试集直接评估

    在训练集上评估没有意义,必须使用未见过的测试集来衡量泛化能力。

    ✅ 加分项:可视化

    如果考试时间允许,添加散点图+回归线可以让答案更出彩:

    import matplotlib.pyplot as plt

    plt.scatter(X, y, color='blue', label='真实数据')
    plt.plot(X, model.predict(X), color='red', label='回归线')
    plt.xlabel('房屋面积')
    plt.ylabel('单价')
    plt.legend()
    plt.show()


    📝 写在最后

    本篇覆盖了深度学习/机器学习课程中最基础的两个程序题。线性回归和逻辑回归不仅是期末考试的高频考点,更是理解神经网络、深度学习的基石。

    下一篇预告:《深度学习》期末练习题 | 程序题第2篇 —— PyTorch Tensor 基本创建、运算与自动微分

    如果觉得有帮助,欢迎 点赞 👍 + 收藏 ⭐ + 关注 三连支持!你的鼓励是我持续更新的最大动力~


    关键词:#深度学习 #机器学习 #线性回归 #逻辑回归 #sklearn #期末考试 #Python


    后期完善版 | 【深度学习期末通关】线性回归与逻辑回归实战:从数学原理到sklearn满分代码详解

    摘要:本文是《深度学习》期末复习系列的开篇之作,旨在为备考同学及机器学习初学者构建一套“理论+代码+避坑”三位一体的知识体系。文章不仅提供了可直接运行的sklearn标准代码模板,更深入剖析了线性回归与逻辑回归背后的数学本质、损失函数推导及优化策略。通过房屋单价预测与鸢尾花分类两个经典案例,配合Mermaid可视化图表、常见考试陷阱解析及FAQ高频问答,帮助读者在理解算法内核的同时,掌握应对期末考试与工程实践的核心能力。全文涵盖数据预处理、模型训练、评估指标、正则化原理等关键考点,并附带扩展阅读与行动建议,力求成为你案头必备的复习手册。


    一、 引言:为什么期末复习必须死磕这两个模型

    在深度学习百花齐放的今天,许多同学在复习时往往急于求成,直接跳入CNN、RNN或Transformer的复杂结构中,却忽视了机器学习大厦的基石——线性回归(Linear Regression) 与逻辑回归(Logistic Regression)。这种“头重脚轻”的复习策略在期末考试和实际面试中极易暴露短板。

    事实上,这两个模型不仅是历年《深度学习》与《机器学习》课程考试中程序题的必考项,更是理解后续所有深度神经网络的“元知识”。1 线性回归教会我们什么是损失函数(Loss Function)、什么是梯度下降(Gradient Descent)、什么是过拟合与正则化;而逻辑回归则引入了激活函数(Activation Function)、交叉熵损失(Cross-Entropy Loss) 以及 概率建模 的思想,这些概念与神经网络中的全连接层、Softmax输出层完全同源。

    本文将摒弃枯燥的纯理论堆砌,采用“场景驱动+代码落地+原理透视”的模式,带你彻底吃透这两个模型。无论你是为了应付即将到来的期末考试,还是为了夯实工程基础,这篇文章都将为你提供一份详尽的实战指南。


    二、 线性回归:房屋单价预测的全流程解析

    2.1 问题定义与数学本质

    线性回归是最基础的监督学习算法,其核心目标是找到一个线性映射关系,使得预测值

    y

    ^

    \\hat{y}

    y^​与真实标签

    y

    y

    y之间的误差最小化。在一元线性回归中,模型假设数据服从如下分布:

    y

    ^

    =

    w

    x

    +

    b

    \\hat{y} = wx + b

    y^​=wx+b

    其中

    w

    w

    w为权重(Weight),

    b

    b

    b为偏置(Bias)。在统计学视角下,这等价于寻找一条直线,使得所有样本点到该直线的垂直距离平方和最小,即普通最小二乘法(Ordinary Least Squares, OLS)。2

    💡 核心要点:线性回归的“线性”指的是参数

    w

    w

    w和

    b

    b

    b是线性的,而非特征

    x

    x

    x必须是线性的。我们可以通过多项式扩展将线性回归应用于非线性关系拟合,这在考试中常作为进阶考点出现。

    2.2 sklearn建模四步法标准模板

    在scikit-learn库中,几乎所有监督学习算法都遵循统一的API设计哲学。掌握这个“万能模板”,相当于掌握了sklearn的半壁江山。

    import numpy as np
    from sklearn.linear_model import LinearRegression

    # ========== 步骤1: 数据准备 (Data Preparation) ==========
    # 特征矩阵X必须是二维数组 (n_samples, n_features)
    # 标签向量y通常是一维数组 (n_samples,)
    X = np.array([150, 200, 250, 300, 350, 400, 600]).reshape(–1, 1)
    y = np.array([6450, 7450, 8450, 9450, 11450, 15450, 18450])

    # ========== 步骤2: 模型实例化 (Model Instantiation) ==========
    # LinearRegression默认使用最小二乘法求解,无需指定学习率
    model = LinearRegression()

    # ========== 步骤3: 模型训练 (Model Fitting) ==========
    # fit方法内部完成参数w和b的计算
    model.fit(X, y)

    # ========== 步骤4: 预测与参数获取 (Prediction & Inspection) ==========
    w = model.coef_ # 返回数组形式,即使是一元回归也是[w]
    b = model.intercept_ # 返回标量
    pred = model.predict([[700]]) # 预测输入也必须是二维数组

    print(f"✅ 回归方程: y = {w[0]:.4f} * x + {b:.4f}")
    print(f"✅ 700平米房屋预测单价: {pred[0]:.2f}")

    2.3 关键API深度解析与避坑指南

    在上述代码中,有几个细节是考试扣分点和工程Bug的重灾区,必须引起高度重视:

    API/操作正确用法错误示范原理说明
    特征形状 X.reshape(-1, 1) X = np.array([…]) sklearn要求特征矩阵严格为2D,以兼容多特征场景。一维数组会导致ValueError。
    预测输入 model.predict([[700]]) model.predict([700]) predict期望接收样本矩阵,[[700]]表示1个样本×1个特征。
    系数获取 model.coef_[0] model.coef_ coef_始终返回数组,打印方程时需索引取值,否则输出带方括号。
    截距获取 model.intercept_ model.b_ sklearn统一命名为intercept_,不存在b_属性。

    ⚠️ 警告:在考试中,如果题目要求“手写梯度下降”而非调用sklearn,请务必区分批量梯度下降(BGD)、随机梯度下降(SGD)与小批量梯度下降(Mini-batch GD) 的区别。sklearn的LinearRegression默认使用的是基于矩阵运算的解析解(Normal Equation),即

    (

    X

    T

    X

    )

    −

    1

    X

    T

    y

    (X^TX)^{-1}X^Ty

    (XTX)−1XTy,而非迭代优化。只有当使用SGDRegressor时才是梯度下降法。3

    2.4 结果可视化与残差分析

    仅仅输出一个预测值是不够的,优秀的答卷或工程报告应当包含可视化验证。以下代码展示了如何绘制回归线与散点图,这是加分项:

    import matplotlib.pyplot as plt

    # 设置中文字体支持
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
    plt.rcParams['axes.unicode_minus'] = False

    plt.figure(figsize=(10, 6))
    # 绘制真实数据散点
    plt.scatter(X, y, color='royalblue', s=80, label='真实样本', zorder=5)
    # 绘制回归线
    X_line = np.linspace(X.min(), X.max(), 100).reshape(–1, 1)
    y_line = model.predict(X_line)
    plt.plot(X_line, y_line, color='crimson', linewidth=2, label=f'拟合直线: y={w[0]:.1f}x+{b:.0f}')

    plt.xlabel('房屋面积 (㎡)', fontsize=14)
    plt.ylabel('单价 (元/㎡)', fontsize=14)
    plt.title('一元线性回归:房屋单价预测', fontsize=16)
    plt.legend(fontsize=12)
    plt.grid(True, linestyle='–', alpha=0.7)
    plt.tight_layout()
    plt.show()


    三、 逻辑回归:鸢尾花分类的深层机制

    3.1 从回归到分类的思维跃迁

    尽管名字里带有“回归”,但逻辑回归本质上是一个分类算法。它之所以被称为“回归”,是因为它沿用了线性回归的线性组合部分

    z

    =

    w

    T

    x

    +

    b

    z = w^Tx + b

    z=wTx+b,但在此基础上增加了一个非线性的Sigmoid激活函数,将连续值映射到

    (

    0

    ,

    1

    )

    (0, 1)

    (0,1)区间,从而赋予输出“概率”的语义。

    P

    (

    y

    =

    1

    ∣

    x

    )

    =

    σ

    (

    z

    )

    =

    1

    1

    +

    e

    −

    z

    P(y=1|x) = \\sigma(z) = \\frac{1}{1 + e^{-z}}

    P(y=1∣x)=σ(z)=1+e−z1​

    这一变换解决了线性回归用于分类时的两大致命缺陷:一是输出范围不受限,无法解释为概率;二是异常点对线性边界影响过大。Sigmoid函数的饱和特性天然地抑制了极端值的影响。4

    3.2 完整实战代码与参数调优

    下面以经典的Iris数据集为例,展示逻辑回归在多分类任务中的标准流程。

    import numpy as np
    from sklearn import datasets, linear_model
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score, classification_report

    # ========== 1. 加载与探索数据 ==========
    iris = datasets.load_iris()
    X = iris.data # shape: (150, 4)
    y = iris.target # shape: (150,), 类别: 0, 1, 2

    # ========== 2. 划分数据集 (关键步骤) ==========
    # random_state保证结果可复现,test_size=0.2是经验值
    X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
    )

    # ========== 3. 构建与训练模型 ==========
    # C=1e5表示极弱的正则化,近似于无正则化的最大似然估计
    # solver='lbfgs'适合中小规模数据集,multinomial支持多分类
    model = linear_model.LogisticRegression(
    C=1e5,
    solver='lbfgs',
    multi_class='multinomial',
    max_iter=1000
    )
    model.fit(X_train, y_train)

    # ========== 4. 全面评估 ==========
    y_pred = model.predict(X_test)
    acc = accuracy_score(y_test, y_pred)

    print(f"🎯 测试集准确率: {acc:.4f}")
    print("\\n📊 详细分类报告:")
    print(classification_report(y_test, y_pred, target_names=iris.target_names))

    3.3 超参数C的正则化本质

    在逻辑回归中,超参数

    C

    C

    C是最常考的知识点之一。许多同学误以为

    C

    C

    C越大正则化越强,事实恰恰相反。

    C

    C

    C是正则化强度的倒数。sklearn的逻辑回归目标函数实际上是:

    min

    ⁡

    w

    (

    1

    2

    ∣

    ∣

    w

    ∣

    ∣

    2

    +

    C

    ∑

    i

    =

    1

    n

    Loss

    (

    y

    i

    ,

    f

    (

    x

    i

    )

    )

    )

    \\min_w \\left( \\frac{1}{2}||w||^2 + C \\sum_{i=1}^{n} \\text{Loss}(y_i, f(x_i)) \\right)

    wmin​(21​∣∣w∣∣2+Ci=1∑n​Loss(yi​,f(xi​)))

    或者等价地写作更常见的形式:

    min

    ⁡

    w

    (

    ∣

    ∣

    w

    ∣

    ∣

    2

    +

    1

    C

    ∑

    i

    =

    1

    n

    Loss

    (

    y

    i

    ,

    f

    (

    x

    i

    )

    )

    )

    \\min_w \\left( ||w||^2 + \\frac{1}{C} \\sum_{i=1}^{n} \\text{Loss}(y_i, f(x_i)) \\right)

    wmin​(∣∣w∣∣2+C1​i=1∑n​Loss(yi​,f(xi​)))

    由此可见:

    • C

      C

      C值很大(如

      10

      5

      10^5

      105):正则化项权重趋近于0,模型倾向于完美拟合训练数据,容易过拟合。

    • C

      C

      C值很小(如

      0.01

      0.01

      0.01):正则化项主导优化目标,强制权重

      w

      w

      w趋近于0,模型更简单,容易欠拟合。

    💡 小贴士:在考试中若未指定

    C

    C

    C值,建议设置为1.0(默认值)或1e5(模拟标准逻辑回归)。若题目明确要求“防止过拟合”,则应尝试较小的

    C

    C

    C值或使用交叉验证选择最优

    C

    C

    C。

    3.4 多分类策略:OvR vs Multinomial

    逻辑回归原生是二分类器,处理多分类问题时主要有两种策略,这也是简答题的高频考点:

  • One-vs-Rest (OvR):训练

    K

    K

    K个二分类器,每个分类器区分“第

    k

    k

    k类”与“非第

    k

    k

    k类”。预测时取置信度最高的类别。优点是简单并行,缺点是类别不平衡时效果差。

  • Multinomial (Softmax):直接使用Softmax函数推广到多类,联合优化所有类别的参数。理论上更优,但计算量稍大。sklearn中通过multi_class='multinomial'启用。

  • 四、 核心知识图谱:线性回归与逻辑回归的对立统一

    为了帮助大家在脑海中建立清晰的知识结构,下表从多个维度对两个模型进行了深度对比。这张表建议背诵,足以应对大部分比较类简答题。

    比较维度线性回归 (Linear Regression)逻辑回归 (Logistic Regression)
    任务类型 回归(连续值预测) 分类(离散标签预测)
    输出含义 具体的数值预测 属于某类的概率
    激活函数 恒等映射

    f

    (

    z

    )

    =

    z

    f(z)=z

    f(z)=z

    Sigmoid / Softmax
    损失函数 均方误差 MSE 交叉熵 Cross-Entropy
    优化方法 解析解 / BGD / SGD BGD / L-BFGS / SGD (无解析解)
    对异常值敏感度 高(平方放大了误差) 低(Sigmoid饱和区抑制梯度)
    正则化变体 Ridge(L2), Lasso(L1), ElasticNet 内置L1/L2,由参数C控制
    决策边界 超平面(阈值需自定义) 超平面(默认阈值0.5)
    sklearn类名 LinearRegression LogisticRegression

    4.1 损失函数的几何意义

    理解损失函数是理解模型行为的关键。

    • MSE的损失曲面:对于线性回归,MSE关于参数

      w

      w

      w是一个凸二次函数,呈完美的碗状,只有一个全局最小值。这就是为什么线性回归可以用解析解一步到位的原因。

    • 交叉熵的损失曲面:对于逻辑回归,虽然引入了非线性Sigmoid,但交叉熵损失关于参数

      w

      w

      w依然是凸函数。这保证了梯度下降一定能收敛到全局最优。注意:如果使用MSE作为逻辑回归的损失函数,损失曲面将变为非凸,导致梯度下降陷入局部最优,因此逻辑回归绝不能用MSE。5


    五、 考场生存指南:常见陷阱与调试技巧

    根据历年阅卷经验,以下四个问题是学生失分的重灾区。请在考前逐一自查。

    ❌ 陷阱1:维度灾难(Shape Mismatch)

    这是新手最常遇到的报错。sklearn的设计原则是“万物皆矩阵”。

    • 症状:ValueError: Expected 2D array, got 1D array instead
    • 病因:传入了一维数组给fit或predict。
    • 处方:永远使用reshape(-1, 1)将单特征转换为列向量;使用reshape(1, -1)将单样本转换为行向量。

    ❌ 陷阱2:数据泄露(Data Leakage)

    • 症状:训练集准确率99%,测试集准确率60%。
    • 病因:在划分数据集之前进行了全局标准化/归一化,导致测试集的统计信息泄露到了训练过程中。
    • 处方:先split,再transform。标准化器只能在训练集上fit,然后分别transform训练集和测试集。

    ❌ 陷阱3:混淆评估指标

    • 症状:在不平衡数据集上只看Accuracy。
    • 病因:当正负样本比例为1:99时,全猜负样本也有99%准确率,但这毫无意义。
    • 处方:分类任务必看Precision、Recall、F1-Score及Confusion Matrix。回归任务关注MSE、RMSE、MAE及

      R

      2

      R^2

      R2分数。

    ✅ 调试神器:检查中间状态

    当模型表现不符合预期时,不要盲目调参,请按以下顺序排查:

  • 打印X.shape, y.shape确认维度。
  • 打印y.unique()确认标签是否正确编码(如0/1而非1/2)。
  • 检查是否存在NaN或Inf值。
  • 查看model.coef_的量级,若权重过大说明未标准化或正则化太弱。

  • 六、 进阶思考:从传统ML到深度学习的桥梁

    为了让这篇复习笔记具有更长远的价值,我们需要思考:这两个模型与深度学习有何关联?

  • 逻辑回归 = 单层神经网络:一个没有隐藏层、输出层使用Sigmoid/Softmax激活函数、损失函数为交叉熵的神经网络,就是逻辑回归。理解了逻辑回归,就理解了深度学习分类任务的“最后一公里”。
  • 特征工程的自动化:线性模型依赖人工构造特征(如多项式、交互项)。深度学习通过多层非线性变换自动学习高阶特征表示,本质上是用算力换取了特征工程的人力。
  • 正则化的传承:L2正则化在深度学习中被称为Weight Decay,L1正则化对应稀疏性约束。Dropout、BatchNorm等现代技术,都可以看作是对传统正则化思想的演进。
  • 📌 核心要点:不要把线性回归和逻辑回归视为“过时”的技术。在表格数据、小样本场景、可解释性要求高的业务中,它们依然是首选。深度学习并非万能钥匙,扎实的古典ML功底才是区分“调包侠”与“算法工程师”的分水岭。


    七、 FAQ:高频疑难问题解答

    以下问题按“搜索热度 × 读者焦虑权重”综合排序,覆盖了从备考到实战的典型困惑。

    Q1: 逻辑回归为什么不叫“逻辑分类”? A: 历史原因。该模型最早由统计学家David Cox在1958年提出,用于描述生物生长曲线,其核心是Logit变换(对数几率),属于广义线性模型(GLM)家族。在统计学传统中,这类模型统称为“回归”。虽然现代机器学习将其用于分类,但名称沿用至今。6

    Q2: 什么时候该用线性回归,什么时候该用逻辑回归? A: 看标签

    y

    y

    y的类型。若

    y

    y

    y是连续数值(如房价、温度、销量),用线性回归;若

    y

    y

    y是离散类别(如是否患病、猫狗识别、情感倾向),用逻辑回归。切勿用线性回归做分类,因为其输出无界且对异常值敏感。

    Q3: sklearn的LogisticRegression默认有正则化吗? A: 是的。这与许多教科书上的“标准逻辑回归”不同。sklearn默认使用L2正则化,且

    C

    =

    1.0

    C=1.0

    C=1.0。若想复现教科书上的无正则化版本,需设置C=1e5或更大。这一点在复现实验结果时极易踩坑。

    Q4: 为什么我的逻辑回归准确率很低,但loss却在下降? A: 可能原因包括:① 阈值0.5不适合当前数据分布(需调整阈值);② 类别严重不平衡(需使用class_weight=‘balanced’);③ 特征未标准化导致收敛缓慢;④ 模型欠拟合,需增加特征或减小正则化强度

    C

    C

    C。

    Q5: 考试中要求手推梯度下降,公式记不住怎么办? A: 记住核心结构:新参数 = 旧参数 – 学习率 × 梯度。对于线性回归MSE,梯度是“误差×特征”的均值;对于逻辑回归交叉熵,梯度形式惊人地相似,只是“误差”变成了“预测概率-真实标签”。这种形式上的统一性不是巧合,而是指数族分布的优良性质决定的。


    八、 附录:可视化辅助理解

    A.1 Sklearn建模全流程图

    #mermaid-svg-ue4jtI5JWiozbGfd{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ue4jtI5JWiozbGfd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ue4jtI5JWiozbGfd .error-icon{fill:#552222;}#mermaid-svg-ue4jtI5JWiozbGfd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ue4jtI5JWiozbGfd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ue4jtI5JWiozbGfd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ue4jtI5JWiozbGfd .marker.cross{stroke:#333333;}#mermaid-svg-ue4jtI5JWiozbGfd svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ue4jtI5JWiozbGfd p{margin:0;}#mermaid-svg-ue4jtI5JWiozbGfd .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ue4jtI5JWiozbGfd .cluster-label text{fill:#333;}#mermaid-svg-ue4jtI5JWiozbGfd .cluster-label span{color:#333;}#mermaid-svg-ue4jtI5JWiozbGfd .cluster-label span p{background-color:transparent;}#mermaid-svg-ue4jtI5JWiozbGfd .label text,#mermaid-svg-ue4jtI5JWiozbGfd span{fill:#333;color:#333;}#mermaid-svg-ue4jtI5JWiozbGfd .node rect,#mermaid-svg-ue4jtI5JWiozbGfd .node circle,#mermaid-svg-ue4jtI5JWiozbGfd .node ellipse,#mermaid-svg-ue4jtI5JWiozbGfd .node polygon,#mermaid-svg-ue4jtI5JWiozbGfd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ue4jtI5JWiozbGfd .rough-node .label text,#mermaid-svg-ue4jtI5JWiozbGfd .node .label text,#mermaid-svg-ue4jtI5JWiozbGfd .image-shape .label,#mermaid-svg-ue4jtI5JWiozbGfd .icon-shape .label{text-anchor:middle;}#mermaid-svg-ue4jtI5JWiozbGfd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ue4jtI5JWiozbGfd .rough-node .label,#mermaid-svg-ue4jtI5JWiozbGfd .node .label,#mermaid-svg-ue4jtI5JWiozbGfd .image-shape .label,#mermaid-svg-ue4jtI5JWiozbGfd .icon-shape .label{text-align:center;}#mermaid-svg-ue4jtI5JWiozbGfd .node.clickable{cursor:pointer;}#mermaid-svg-ue4jtI5JWiozbGfd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ue4jtI5JWiozbGfd .arrowheadPath{fill:#333333;}#mermaid-svg-ue4jtI5JWiozbGfd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ue4jtI5JWiozbGfd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ue4jtI5JWiozbGfd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ue4jtI5JWiozbGfd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ue4jtI5JWiozbGfd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ue4jtI5JWiozbGfd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ue4jtI5JWiozbGfd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ue4jtI5JWiozbGfd .cluster text{fill:#333;}#mermaid-svg-ue4jtI5JWiozbGfd .cluster span{color:#333;}#mermaid-svg-ue4jtI5JWiozbGfd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ue4jtI5JWiozbGfd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ue4jtI5JWiozbGfd rect.text{fill:none;stroke-width:0;}#mermaid-svg-ue4jtI5JWiozbGfd .icon-shape,#mermaid-svg-ue4jtI5JWiozbGfd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ue4jtI5JWiozbGfd .icon-shape p,#mermaid-svg-ue4jtI5JWiozbGfd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ue4jtI5JWiozbGfd .icon-shape .label rect,#mermaid-svg-ue4jtI5JWiozbGfd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ue4jtI5JWiozbGfd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ue4jtI5JWiozbGfd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ue4jtI5JWiozbGfd :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    缺失/异常

    正常

    欠拟合

    过拟合

    满意

    原始数据

    数据质量检查

    清洗与预处理

    特征工程

    划分训练集/测试集

    模型实例化

    model.fit 训练

    模型评估

    增加特征/减小正则化

    增加数据/增大正则化

    model.predict 部署

    A.2 线性回归 vs 逻辑回归决策边界对比

    #mermaid-svg-rjz3RAFlIUkIiak7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rjz3RAFlIUkIiak7 .error-icon{fill:#552222;}#mermaid-svg-rjz3RAFlIUkIiak7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rjz3RAFlIUkIiak7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rjz3RAFlIUkIiak7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rjz3RAFlIUkIiak7 .marker.cross{stroke:#333333;}#mermaid-svg-rjz3RAFlIUkIiak7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rjz3RAFlIUkIiak7 p{margin:0;}#mermaid-svg-rjz3RAFlIUkIiak7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    核SVM / MLP

    多项式回归

    线性回归 (Linear Regression)

    逻辑回归 (Logistic Regression)

    销量趋势

    图像识别

    鸢尾花分类

    房屋价格

    连续输出

    离散输出

    线性关系

    非线性关系

    模型选择决策矩阵

    A.3 逻辑回归Sigmoid函数特性

    #mermaid-svg-xJ4TzQqDB0cA5efI{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xJ4TzQqDB0cA5efI .error-icon{fill:#552222;}#mermaid-svg-xJ4TzQqDB0cA5efI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xJ4TzQqDB0cA5efI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xJ4TzQqDB0cA5efI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xJ4TzQqDB0cA5efI .marker.cross{stroke:#333333;}#mermaid-svg-xJ4TzQqDB0cA5efI svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xJ4TzQqDB0cA5efI p{margin:0;}#mermaid-svg-xJ4TzQqDB0cA5efI :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Sigmoid激活函数曲线

    -6

    -4.8

    -3.6

    -2.4

    -1.2

    0

    1.2

    2.4

    3.6

    4.8

    6

    x

    1

    0.9

    0.8

    0.7

    0.6

    0.5

    0.4

    0.3

    0.2

    0.1

    0

    y


    九、 扩展阅读推荐

    为满足不同程度的学习需求,以下资源按优先级排列:

  • 《统计学习方法》李航 – 第6章 逻辑斯谛回归
    • 摘要:国内最严谨的推导,包含最大熵模型与逻辑回归的关系。
    • 适用人群:考研党、追求数学严谨性的同学。
  • Scikit-learn官方文档 – Linear Models
    • 摘要:API细节、参数含义、算法实现源码的最权威来源。
    • 适用人群:工程开发者、需要查阅具体参数用法的同学。
  • Andrew Ng Machine Learning Course – Week 2-3
    • 摘要:直觉式讲解,向量化编程思想启蒙,梯度下降可视化极佳。
    • 适用人群:零基础入门、偏好视频学习的同学。
  • 《Pattern Recognition and Machine Learning》Bishop – Chapter 4
    • 摘要:从贝叶斯视角重新审视线性模型,引入概率图模型观点。
    • 适用人群:研究生、希望深入理解概率机器学习的研究者。

  • 十、 总结与行动建议

    线性回归与逻辑回归看似简单,实则蕴含着机器学习最核心的范式:数据→模型→损失→优化→评估。掌握了这条主线,后续学习SVM、决策树乃至深度学习,都不过是这条主线上的分支与延伸。

    给你的行动清单:

  • ✅ 今日:不看任何参考,独立默写出线性回归和逻辑回归的sklearn四步法代码。
  • ✅ 明日:找一份新的数据集(如Boston Housing或Titanic),从头到尾跑通全流程,并生成可视化报告。
  • ✅ 本周:尝试手写一遍梯度下降更新公式,并用NumPy实现,对比sklearn结果。
  • ✅ 考前:回顾本文的“陷阱”与“FAQ”章节,确保不在基础问题上丢分。
  • 📝 写在最后:技术学习的本质不是记忆API,而是建立对数据与模型之间关系的直觉。愿这篇笔记能成为你通往深度学习殿堂的一块坚实垫脚石。下一篇我们将进入PyTorch的世界,探讨Tensor运算与自动微分机制,敬请期待!


  • 在Ian Goodfellow等人的《Deep Learning》一书中,第5章专门回顾了机器学习基础,明确指出线性模型是理解深度网络容量、过拟合及优化的必要前置知识。 ↩︎

  • 最小二乘法由高斯和勒让德在19世纪初独立提出,最初用于天体轨道计算。其统计性质(如BLUE最佳线性无偏估计)需满足Gauss-Markov假设,这在计量经济学中尤为重要。 ↩︎

  • 解析解的时间复杂度为

    O

    (

    n

    2

    d

    +

    d

    3

    )

    O(n^2d + d^3)

    O(n2d+d3),其中

    n

    n

    n为样本数,

    d

    d

    d为特征数。当

    d

    >

    10000

    d > 10000

    d>10000时,矩阵求逆变得极其昂贵,此时SGD是更优选择。 ↩︎

  • Sigmoid函数的导数为

    σ

    (

    z

    )

    (

    1

    −

    σ

    (

    z

    )

    )

    \\sigma(z)(1-\\sigma(z))

    σ(z)(1−σ(z)),这意味着当输出接近0或1时,梯度趋近于0,导致“梯度消失”问题。这也是为什么深层网络中ReLU逐渐取代Sigmoid的原因之一,但在浅层逻辑回归中Sigmoid依然有效。 ↩︎

  • 交叉熵损失源于信息论中的KL散度。最小化交叉熵等价于最大化似然函数,这为逻辑回归提供了坚实的概率论基础,而MSE缺乏这种概率解释。 ↩︎

  • Logit函数定义为

    ln

    ⁡

    (

    p

    1

    −

    p

    )

    \\ln(\\frac{p}{1-p})

    ln(1−pp​),即对数几率。逻辑回归实际上是“对数几率回归”的简称。这一命名反映了其作为广义线性模型的身份,即通过链接函数将线性预测器与响应变量的期望联系起来。 ↩︎

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 《深度学习》期末练习题 | 程序题第1篇:线性回归与逻辑回归实战
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!