第06章 · 机器学习 · 阶段测试题答案¶
一 · 单选 (8 题)¶
1.1 B - 监督学习需要标签。
1.2 A - Bias-Variance 权衡: 模型复杂度 ↑, Bias ↓ Variance ↑。
1.3 C - L1 正则(Lasso)产生稀疏解。
1.4 B - 交叉熵损失用于分类。
1.5 A - Softmax 把 logits 转概率。
1.6 B - Adam = Momentum + RMSProp。
1.7 C - Dropout 训练时随机失活, 推理时关闭。
1.8 B - XGBoost 是 GBDT 的高效实现。
二 · 多选 (4 题)¶
2.1 ABD - 都是集成学习方法。
2.2 ABC - D 错: 训练误差小, 测试误差大是过拟合。
2.3 ABD - C 错: K-Means 是无监督。
2.4 ABC - 数据预处理步骤。
三 · 简答 (5 题)¶
3.1 Bias-Variance 权衡¶
总误差 = Bias² + Variance + 噪声 (不可消除) Bias: 模型假设的偏差, 简单模型 Bias 高 Variance: 对训练数据波动的敏感度, 复杂模型 Variance 高 权衡: 找到复杂度最佳点
正则化: 增加 Bias 减少 Variance 集成: 减少 Variance 略增 Bias
3.2 过拟合 vs 欠拟合¶
过拟合: 训练误差小, 测试误差大 - 模型过于复杂 - 解决: 数据增强 / 正则化 / Dropout / Early Stopping
欠拟合: 训练误差也大 - 模型过于简单 - 解决: 增加特征 / 复杂模型 / 减少正则化
3.3 监督学习 vs 无监督学习¶
| 维度 | 监督 | 无监督 |
|---|---|---|
| 数据 | 有标签 | 无标签 |
| 任务 | 分类/回归 | 聚类/降维 |
| 算法 | SVM/XGBoost/NN | K-Means/PCA |
| 评估 | 准确率/AUC | 轮廓系数 |
半监督: 部分标签 + 大量无标签 自监督: 数据自身生成标签 (BERT/GPT)
3.4 梯度下降变种¶
| 算法 | 特点 | 适用 |
|---|---|---|
| SGD | 简单, 慢, 噪声大 | 大数据 |
| Momentum | 加速 + 减少振荡 | 通用 |
| Adam | 自适应学习率 | Transformer 默认 |
| AdaGrad | 累积梯度衰减 | 稀疏特征 |
| RMSProp | 指数加权移动平均 | RNN |
| L-BFGS | 二阶近似 | 小数据集 |
3.5 CNN vs RNN vs Transformer¶
CNN: 局部连接 + 权重共享, 适合图像/语音 RNN: 时序循环, 适合序列(短程依赖) Transformer: Self-Attention, 长程依赖, 可并行, 当前主流
| 模型 | 长程依赖 | 并行 | 适用 |
|---|---|---|---|
| CNN | ❌ (受卷积核限制) | ✅ | 图像 |
| RNN | ⚠️ (梯度消失) | ❌ | 短序列 |
| Transformer | ✅ | ✅ | 通用 SOTA |
四 · 编程 (2 题)¶
4.1 XGBoost 分类¶
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = XGBClassifier(n_estimators=100, max_depth=3, learning_rate=0.1)
model.fit(X_train, y_train)
print(f"Accuracy: {model.score(X_test, y_test):.3f}")
4.2 正则化对比¶
from sklearn.linear_model import Ridge, Lasso
import numpy as np
X = np.random.randn(100, 10)
y = X[:, 0] + 0.5 * X[:, 1] + np.random.randn(100) * 0.1
# L2 正则
ridge = Ridge(alpha=1.0).fit(X, y)
print(f"Ridge 非零系数: {np.sum(ridge.coef_ != 0)}")
# L1 正则
lasso = Lasso(alpha=0.1).fit(X, y)
print(f"Lasso 非零系数: {np.sum(lasso.coef_ != 0)}") # 更稀疏