Python数据分析与应用
第9章 机器学习入门
本章共 25 题,可按题型筛选。
汤姆·米切尔对机器学习的定义中,提到三个核心要素:任务 $T$、性能度量 $P$ 和训练经 验 $E$。若我们要开发一个“垃圾邮件识别系统”,以下描述正确的是:
在监督学习中,如果模型的预测输出值 $y$ 是一个连续值(如预测房价),则该问题属 于:
针对无监督学习,下列描述错误的是:
机器学习的工作流程通常包含多个步骤。在材料中提到,若模型评估结果不符合预期目 标,首先应回溯到哪个环节?
关于“过拟合(Over-fitting)”,下列说法正确的是:
KNN 算法(K-Nearest Neighbor)的核心思想是:
在 sklearn.neighbors.KNeighborsClassifier 中,若想使用“距离的倒数”作为投票权重,应设 置超参数 weights 为:
闵可夫斯基距离(Minkowski Distance)是欧氏距离和曼哈顿距离的泛化形式。当超参数 $p=1$ 时,它等价于:
关于“交叉验证(Cross Validation)”,以下描述不符合材料内容的是:
均值方差归一化(Standardization)的主要目的是:
在机器学习中,我们通常约定使用矩阵 $\mathbf{X}$ 表示数据集特征,第 $i$ 个样本记作 ________。
监督学习根据输出值的不同主要分为回归和 ________。
强化学习涉及的五个基本元素分别是 Agent、环境、状态、动作和 ________。
原始数据在训练前通常需要划分为训练集和验证集(或测试集),材料中建议的比例通常 是 ________ 归为训练数据。
欠拟合(Under-fitting)发生的主要原因是模型设计 ________,未能抓取数据的内在规 律。
Scikit-learn(sklearn)库中,用于实现 KNN 算法的类位于 sklearn.________ 模块下。
在 KNN 中,若 $p=2$,则计算距离的方式是 ________ 距离。
这种通过遍历给定的参数组合来优化模型的方法被称为 ________ 搜索。
________ 归一化适用于数据有明显边界(如学生成绩 0-100)的情况。
在使用 StandardScaler 进行数据转换时,计算训练集均值和标准差的方法是 ________。
请简述汤姆·米切尔定义的“学习”三要素,并结合材料中的“中国象棋程序”例子具体说明。
请写出闵可夫斯基距离的通用数学公式,并分别说明当 $p=1$ 和 $p=2$ 时对应的距离名 称。
什么是归一化?为什么在执行 KNN 算法前通常需要进行归一化处理?
简述 $K$ 折交叉验证(K-fold Cross Validation)的基本操作流程。
题目:基于 Scikit-learn 实现乳腺癌数据集预测 pipeline 要求:补全代码,完成从加载数据、划分数据集、数据归一化到模型网格搜索寻找最优 $K$ 值的 完整流程。 import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler # 1. 加载乳腺癌数据集 data = load_breast_cancer() X, y = data.data, data.target # 2. 划分数据集 (测试集占比 20%, 不洗牌以符合材料示例) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , shuffle= False ) # 3. 数据归一化 (请使用均值方差归一化) scaler = # [补全代码] # 计算训练集均值标准差并转换 X_train_scaled = scaler.fit_transform(X_train) # 使用相同参数转换测试集 X_test_scaled = # [补全代码] # 4. 设置网格搜索参数 (K值范围: 1-10; 权重: uniform, distance) param_grid = [ { 'n_neighbors' : [i for i in range ( 1 , 11 )], 'weights' : # [补全代码] } ] # 5. 执行网格搜索与交叉验证 (使用 KNeighborsClassifier) knn_clf = KNeighborsClassifier() grid_search = # [补全代码] (estimator=knn_clf, param_grid=param_grid, cv=5) grid_search.fit(X_train_scaled, y_train) # 6. 输出结果 print( "最优参数:" , grid_search.best_params_) print( "最优得分:" , grid_search.best_score_) print( "测试集准确率:" , grid_search.score(X_test_scaled, y_test))