《深度学习》期末练习题 | 程序题第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−α⋅m1i=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的重灾区,必须引起高度重视:
| 特征形状 | 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∑nLoss(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+C1i=1∑nLoss(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
逻辑回归原生是二分类器,处理多分类问题时主要有两种策略,这也是简答题的高频考点:
K
K
K个二分类器,每个分类器区分“第
k
k
k类”与“非第
k
k
k类”。预测时取置信度最高的类别。优点是简单并行,缺点是类别不平衡时效果差。
四、 核心知识图谱:线性回归与逻辑回归的对立统一
为了帮助大家在脑海中建立清晰的知识结构,下表从多个维度对两个模型进行了深度对比。这张表建议背诵,足以应对大部分比较类简答题。
| 任务类型 | 回归(连续值预测) | 分类(离散标签预测) |
| 输出含义 | 具体的数值预测 | 属于某类的概率 |
| 激活函数 | 恒等映射
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分数。
✅ 调试神器:检查中间状态
当模型表现不符合预期时,不要盲目调参,请按以下顺序排查:
六、 进阶思考:从传统ML到深度学习的桥梁
为了让这篇复习笔记具有更长远的价值,我们需要思考:这两个模型与深度学习有何关联?
📌 核心要点:不要把线性回归和逻辑回归视为“过时”的技术。在表格数据、小样本场景、可解释性要求高的业务中,它们依然是首选。深度学习并非万能钥匙,扎实的古典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
九、 扩展阅读推荐
为满足不同程度的学习需求,以下资源按优先级排列:
- 摘要:国内最严谨的推导,包含最大熵模型与逻辑回归的关系。
- 适用人群:考研党、追求数学严谨性的同学。
- 摘要:API细节、参数含义、算法实现源码的最权威来源。
- 适用人群:工程开发者、需要查阅具体参数用法的同学。
- 摘要:直觉式讲解,向量化编程思想启蒙,梯度下降可视化极佳。
- 适用人群:零基础入门、偏好视频学习的同学。
- 摘要:从贝叶斯视角重新审视线性模型,引入概率图模型观点。
- 适用人群:研究生、希望深入理解概率机器学习的研究者。
十、 总结与行动建议
线性回归与逻辑回归看似简单,实则蕴含着机器学习最核心的范式:数据→模型→损失→优化→评估。掌握了这条主线,后续学习SVM、决策树乃至深度学习,都不过是这条主线上的分支与延伸。
给你的行动清单:
📝 写在最后:技术学习的本质不是记忆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),即对数几率。逻辑回归实际上是“对数几率回归”的简称。这一命名反映了其作为广义线性模型的身份,即通过链接函数将线性预测器与响应变量的期望联系起来。 ↩︎
网硕互联帮助中心




评论前必须登录!
注册