《机器学习实战:基于 Scikit-Learn、Keras 和 TensorFlow》(第三版)第一章练习题答案
1. 如何定义机器学习?
一个程序通过学习经验E,在任务T上的性能P随着经验E的增加而提高。
简单来说:机器学习是关于从数据中自动分析并获得模型,并利用模型对未知数据进行预测或决策的学科。
2. 机器学习在哪些问题上表现突出,你能说出四类应⽤吗?
机器学习在以下四类问题上表现尤为出色:
1、存在复杂模式或规则的问题: 这些问题背后的规则对于人类来说过于复杂或难以清晰定义。例如:
图像识别(判断照片中是猫还是狗)
语音识别(将音频转换为文字)
传统方法难以编写规则,而机器学习可以通过大量样本自动学习其中的复杂模式。
2、需要大规模个性化的问题: 为海量用户或项目定制解决方案,手工操作不现实。例如:
推荐系统(Netflix 推荐电影,Amazon 推荐商品)
精准广告投放
机器学习可以为每个用户学习其独特的偏好。
3、环境快速变化的问题: 问题的模式不是静态的,会随时间演变。例如:
欺诈检测:欺诈分子的手段不断翻新,系统需要持续学习新的欺诈模式。
股票市场预测
机器学习模型可以随着新数据的到来不断更新和适应。
**4、从复杂数据中获得洞察的问题:**需要探索大型、高维数据集以发现隐藏的相关性或结构。例如:
客户细分:将客户群分成具有不同特征的组别,用于制定营销策略。
基因数据分析:发现疾病与特定基因序列之间的关系。
无监督学习算法可以自动发现这些有价值的洞见。
3. 什么是被标记的训练集?
一个被标记的训练数据集是指其中每个训练实例(或样本)都同时包含了:
输入数据(特征,Features):描述该实例的一组属性。
期望输出(标签,Label 或 目标,Target):我们希望模型为该输入预测的正确结果。
例如:在一个垃圾邮件分类器中,一个被标记的数据集包含成千上万封邮件。对于每一封邮件:
**输入(特征):**可能是邮件的发件人、标题、正文内容等。
**输出(标签):**是人工预先标注好的类别,如 “spam”(垃圾邮件)或 “ham”(非垃圾邮件)。
被标记的数据集是监督学习的基础。
4. 最常⻅的两种监督学习任务是什么?
最常见的两种监督学习任务是:
1、分类(Classification):
任务:预测一个离散的类别标签。
例子:
判断一封邮件是“垃圾邮件”还是“非垃圾邮件”(二分类)。
识别图片中的动物是“猫”、“狗”还是“鸟”(多分类)。
判断肿瘤是“良性”还是“恶性”。
2、回归(Regression):
任务:预测一个连续的数值。
例子:
预测一套房子的售价。
预测明天某只股票的价格。
根据一个人的教育年限和工作经验预测其年薪。
5. 你能说出四种常⻅的⽆监督学习任务吗?
**聚类(Clustering)** :将数据分成相似的组(如客户细分)。
异常检测(Anomaly detection) :识别数据中的异常点(如信用卡欺诈检测)。
降维(Dimensionality reduction) :减少数据中的特征数量,同时保留其重要结构(如数据可视化)。
关联规则学习(Association rule learning) :发现数据中属性之间的有趣关系(如“购物篮分析”)。
6. 你会使⽤什么类型的算法让机器⼈在各种未知地形中⾏⾛?
强化学习(Reinforcement Learning)。机器人(智能体)通过尝试不同的动作(行走方式)并从环境(地形)中获得奖励(如成功前进)或惩罚(如摔倒)来学习最优策略。
7. 你会使⽤什么类型的算法将客户分成多个组?
聚类(Clustering),这是一种无监督学习任务。常见的算法有 K-Means、DBSCAN 等
8. 你会把垃圾邮件检测问题定义为监督学习问题还是⽆监督学习问题?
监督学习问题。因为它需要使用一个已经被标记为“垃圾邮件”或“非垃圾邮件”的历史邮件数据集来训练模型。
9. 什么是在线学习系统?
在线学习系统是一种能够逐步、增量地进行学习的系统。它每次只接收一个或一小批(mini-batch)数据,并据此快速更新模型,从而能够适应快速变化的数据流。
10. 什么是核外学习?
核外学习(Out-of-core learning) 是在线学习的一种,专门用于处理体积过大而无法全部装入计算机主内存(RAM)的数据集。算法将数据分成小批量,一次只加载一批到内存中进行训练。
11. 什么类型的算法依赖于相似性度量来进⾏预测?
基于实例的学习(Instance-based learning) 算法。最典型的例子是 k-最近邻算法(k-Nearest Neighbors, k-NN),它通过计算新实例与训练集中所有实例的相似度(如距离)来进行预测。
12. 模型参数和模型超参数有什么区别?
模型参数(Model Parameters):是模型内部的变量,其值从训练数据中学习得到(如线性回归中的权重、神经网络中的连接权重)。
**模型超参数(**Model Hyperparameters):是学习算法外部的配置变量,其值不能在训练过程中学习,必须在训练开始前由人工设定(如 k-NN 中的 k 值、随机森林中树的数量)。
13. 基于模型的算法搜索什么?它们最常⽤的成功策略是什么?它们如何做出预测?
**搜索什么:**基于模型的算法从数据中搜索一种模式或模型(如一个数学公式或一组规则)。
**成功策略:**最常用的策略是归纳(Generalization),即学习一个能够对未见过的数据做出良好预测的模型,而不是简单地记住训练数据。
**如何预测:**通过从训练数据中学习到的模型来对新实例做出预测。
14. 你能说出机器学习中的四个主要挑战吗?
1、**数据质量差:**训练数据数量不足、噪声太多、特征无关或特征不具代表性。
2、**过拟合(Overfitting):**模型在训练数据上表现太好,但学习了噪声和细节,导致在新数据上泛化能力差。
3、**欠拟合(Underfitting):**模型过于简单,无法捕捉数据中的基本模式,在训练数据和新数据上都表现不佳。
4、**数据漂移(Data Drift):**模型上线后,数据模式随着时间发生变化,导致模型性能下降。
15. 如果你的模型在训练数据上表现很好,但对新实例的泛化能⼒很差,这是怎么回事?你能说出 三种可能的解决⽅案吗?
这是过拟合(Overfitting)。
三种解决方案:
简化模型:选择参数更少、更简单的模型(如降低多项式次数、减少决策树的深度)。
收集更多训练数据。
减少训练数据中的噪声(如修复数据错误、去除异常值)
16. 什么是测试集?为什么要使⽤它?
测试集:是模型在训练阶段从未见过的数据子集。
**目的:**用于在项目最后评估最终模型的泛化性能,模拟模型在实际应用中的表现。绝不能用于调整模型或选择模型。
17. 验证集的⽬的是什么?
验证集用于:
1、模型选择:比较不同的模型架构。
2、超参数调优:为模型寻找最佳的超参数组合。
3、防止信息泄露:在调整模型和超参数时,提供一个 unbiased 的性能评估,避免使用测试集导致过拟合。
18. 什么是train-dev集?什么时候需要它?如何使⽤?
Train-dev集:是从训练集中分出的一小部分数据,不用于训练,但其分布与训练集相同。
何时需要:当训练数据和真实环境中的数据存在分布不匹配时(例如,用高清网络图片训练,但模型要用于手机拍摄的模糊图片)。
如何使用:
1、如果在训练集上表现好,但在train-dev集上表现差,说明模型过拟合了训练集。
2、如果在train-dev集上表现好,但在验证集/测试集上表现差,说明问题来自数据不匹配,而不是过拟合。
19. 如果使⽤测试集来调整超参数会出现什么问题?
这会导致信息泄露。你会根据测试集的表现来调整模型,相当于让模型“偷看”了考试答案。这样调整后的模型会对测试集产生过拟合,使得在测试集上评估出的泛化性能过于乐观,无法真实反映模型在全新数据上的表现。测试集将不再能提供模型性能的无偏估计。
更多推荐


所有评论(0)