二十九道机器学习经典面试题

24 阅读19分钟

image.png

更多详细资料,尽在公众号【海水三千】,等你领取哟!

一.使用机器学习模型时,一般怎样处理数据集?

  1. 数据收集与观察
    • 数据来源:明确数据是否来自可靠渠道(数据库/API/爬虫等),检查数据量是否足够(样本量 vs 特征数量)。
    • 初步观察:用pandashead()info()describe()快速查看字段类型、缺失值、统计分布,初步判断数据质量。
  2. 数据清洗(Data Cleaning)
    • 处理缺失值
      • 删除:缺失比例过高的样本/特征(如>70%)可直接删除(dropna())。
      • 填充:用均值/中位数(数值型)、众数(类别型)、模型预测(如KNN)填充(SimpleImputer)。
    • 处理异常值
      • 可视化:箱线图(boxplot)或散点图观察离群点。
      • 处理:根据业务逻辑判断是否删除或用分位数截断(如设定3σ原则)。
    • 去重与纠错:删除完全重复的样本(duplicated()),检查字段逻辑矛盾(如年龄为负)。
  3. 特征工程(Feature Engineering)
    • 特征编码
      • 类别型:有序类别用OrdinalEncoder,无序用OneHotEncoder(避免虚拟变量陷阱)。
      • 文本型:TF-IDF或词嵌入(如Word2Vec)。
    • 特征变换
      • 标准化:对线性模型(如SVM、逻辑回归)用StandardScaler(均值0,方差1)。
      • 归一化:对距离敏感的模型(如KNN)用MinMaxScaler(缩放到[0,1])。
    • 特征构造
      • 组合特征(如销售额=单价×数量)。
      • 分箱(Binning):将连续年龄分段为“青年/中年/老年”。
  4. 数据集划分
    • 常规划分:按比例切分(如7:3或8:1:1)→ train_test_split
    • 时间序列划分:按时间顺序划分,避免未来信息泄露。
    • 分层抽样(Stratified Split):对类别不平衡数据,保持训练/测试集的类别分布一致。
  5. 处理不平衡数据
    • 重采样
      • 过采样少数类:用SMOTE算法生成合成样本(imbalanced-learn库)。
      • 欠采样多数类:随机删除部分样本。
    • 调整损失函数:给少数类更高的权重(如class_weight='balanced')。
  6. 数据转换与存储
    • 流水线封装:用Pipeline将预处理步骤封装(避免测试集信息泄露)。
    • 持久化存储:将处理后的数据保存为.csv.pkl文件,便于复用。

二.什么是过拟合与欠拟合?如何解决?

(一)、过拟合(Overfitting)

定义:模型在训练数据上表现极好(如准确率高),但在未知数据(测试集/实际场景)中表现差,本质是“死记硬背”训练数据中的噪声或细节,导致泛化能力差。
典型表现:训练误差低,测试误差高。

解决方法

  1. 数据层面
    • 增加训练数据量(数据增强)。
    • 清洗噪声数据(如异常值、错误标签)。
  2. 模型层面
    • 降低模型复杂度(如减少神经网络层数、决策树的深度)。
    • 加入正则化(L1/L2正则化,约束权重)。
  3. 训练技巧
    • 交叉验证(如K折交叉验证)。
    • 早停法(Early Stopping):监控验证集误差,提前终止训练。
    • Dropout(神经网络中随机屏蔽部分神经元)。

(二)、欠拟合(Underfitting)

定义:模型在训练数据和测试数据上表现均不佳,本质是模型未学到数据中的有效规律(如特征与标签的关系)。
典型表现:训练误差和测试误差都高。

解决方法

  1. 模型层面
    • 增加模型复杂度(如添加更多层、更多特征)。
    • 减少正则化强度(如降低L1/L2的惩罚系数)。
  2. 数据与特征
    • 添加更多有效特征(如特征工程、引入交叉特征)。
    • 减少数据中的噪声干扰。
  3. 训练优化
    • 延长训练时间(如增加epoch)。

    • 调整优化算法(如用Adam替代SGD)。

image.png

十二.逻辑回归算法的优缺点是什么?

优点:

  1. 简单明了:
    • 逻辑回归模型易于理解和解释。它通过sigmoid函数将输入特征转换为概率值(0到1),直观地表示每个特征对结果的影响
      程度。
  2. 计算效率高:
    • 由于其参数数量较少,且损失函数具有良好的数学性质(如凸性),逻辑回归在数据量较大时也能高效地进行优化和计算。
      这种特性使其在处理大数据集时表现良好。
  3. 概率预测能力:
    • 除了提供分类结果外,逻辑回归模型还能输出每个样本属于某一类的概率估计。这对于需要评估预测置信度的应用非常有用
      ,如医疗诊断中的风险评估或客户 churn 预测。

缺点:

  1. 线性边界限制:
    • 逻辑回归本质上是线性的分类器,这意味着在处理复杂、非线性数据时可能会有局限性。对于样本空间中需要复杂决策边界
      的问题,逻辑回归可能无法达到最佳性能。
  2. 多重共线性敏感:
    • 如果自变量之间存在高度相关(即多重共线性问题),逻辑回归模型的参数估计会变得不稳定且不准确。这可能导致系数解
      释困难,并影响模型的整体表现。
  3. 对非线性关系处理不足:
    • 当数据之间的关系呈现非线性特征时,逻辑回归可能无法捕捉到这些复杂的关系,导致分类效果下降。为了应对这种情况,
      通常需要结合其他技术(如多项式回归或核方法)进行改进。
  4. 对连续变量的敏感度较高:
    • 如果输入特征中存在大量的连续变量,并且其分布不是正态分布,则可能会影响模型的表现。在处理这种数据时,可能需要
      先进行标准化或归一化处理。
  5. 在类别不平衡问题上的表现有限:
    • 当一个类别的样本数量远少于另一个类别时,逻辑回归可能会偏向多数类别,导致预测效果不佳。解决这个问题通常需要采
      用采样技术(如过采样、欠采样)或调整分类阈值。
  6. 解释性可能受限:
    • 虽然逻辑回归模型的系数可以用来解释变量对结果的影响方向和大小,但在特征之间存在多重共线性时,系数的意义会受到
      干扰。此外,在包含交互项的情况下,模型的解释性也会相应降低。
  7. 对于非二元分类问题的应用限制:
    • 虽然可以通过多类别逻辑回归扩展到多分类问题,但其计算复杂度显著增加,并且在类别数量较多时可能不如其他算法(如
      支持向量机或神经网络)有效。

十三.逻辑回归的原理和适用条件是什么?

(一)、逻辑回归的原理

  1. 基本概念
    • 逻辑回归是一种用于分类的统计方法。它主要用于解决二元分类问题,尽管也可以扩展到多类别分类。
  2. 线性回归与sigmoid函数
    • 线性回归用于预测连续变量,而逻辑回归在某种程度上类似于线性回归,但它使用了sigmoid(逻辑)函数来将预测值映射
      到0和1之间。
  3. 输出解释
    • sigmoid函数的输入是线性组合image,其中image是权重,image是特征,image是偏置
    • 输出结果image表示样本属于某类的概率。
  4. 决策边界
    • image时,预测为一类;否则预测为另一类。这形成了一个决策边界。
  5. 损失函数(对数似然)
    • 使用对数似然损失函数来衡量模型预测与实际标签的差异。通过最小化这个损失函数,可以优化模型参数。
  6. 梯度下降算法
    • 为了找到使得损失函数最小的参数组合,通常使用梯度下降算法进行迭代优化。

(二)、逻辑回归的适用条件

  1. 数据类型
    • 适用于二元分类问题。如果因变量是多类别且互斥(如三元分类),需要使用多项式逻辑回归或其他扩展方法。
  2. 线性关系假设
    • 自变量对目标变量的影响可以在线性组合中得到近似表达,即即使关系不是完全线性的,但线性组合仍然足够描述它们之间
      的相互作用。
  3. 低多重共线性
    • 当自变量之间存在高度相关(多重共线性)时,模型的稳定性会下降。这种情况下可能需要采用变量选择或正则化方法来缓
      解多重共线性问题。
  4. 样本数量和维度
    • 通常要求样本数量足够大以支持所需的参数估计。高维数据需要更多的样本以避免过拟合,同时确保足够的统计效力。
  5. 类别分布
    • 对于二元分类问题,因变量的两个类群应该在特征空间中存在一定的区分度。
  6. 线性决策边界
    • 如果决策边界过于复杂(即数据不是线性可分的),逻辑回归可能会性能不佳。此时,可能需要考虑使用其他算法如支持向
      量机或神经网络。
  7. 无类别内异方差
    • 对于分类问题,通常假设各个类别的误差方差相同,尽管在某些情况下,这可能不是必须的。
  8. 独立性假设
    • 假设样本之间是相互独立的。如果存在集群化数据(如家庭成员或 repeated measures),需要采用其他方法进行调整。

二十.在构建决策树模型时,怎么处理连续性属性和缺失值?

1. 处理连续属性的方法:

在构建决策树时,处理连续属性的主要目标是找到一个最优分割点(split point),使得基于该分割点的子数据集能够最大化信息增益或最小化基尼不纯度。

  • 二分法(Binary Search):
    连续属性可以取无穷多个可能值,因此无法穷举所有潜在的分割点。为了找到最优分割点,通常使用一种称为“二分法”的方
    法,遍历连续属性的所有可能分割点,并计算每个分割点的信息增益或基尼不纯度。虽然这种方法计算量较大,但通过预先对数据进行排序和利用数据结构(如滑动窗口)可以提高效率。
  • 分位数法(Quantile Binning):
    连续属性的值范围可能很大,直接处理所有潜在分割点会导致较高的计算复杂度。为了提高效率,可以通过将数据按分位数划分区间,使用每个区间的中间值作为分割点。例如,可以预先将数据分成若干个等间距或按四分位数、十分位数等进行分组,从而减少需要考虑的分割点数量。
  • 贪心算法(Greedy Algorithm):
    决策树构建过程中使用贪心算法,在每个节点选择一个最优的分割点来尽可能多地将样本分成纯度更高的子集。这种方法虽然可能导致局部最优解,但在实际应用中已经足够好,并且计算效率较高。

2. 处理缺失值的方法:

处理缺失值是一个复杂的问题,但决策树模型本身具有一定的鲁棒性,能够在构建树的过程中自然地处理缺失数据。

  • 忽略样本(Case Deletion):
    如果缺失值过多或分布不均,可能会影响模型的性能。为了提高模型的泛化能力,可以选择忽略这些样本。然而,在实际应用中,这种做法可能导致训练集偏差,并且在测试时失去这些样本的信息。
  • 填补缺失值(Imputation):
    补填缺失值的方法有很多种,可以采用以下几种策略:
    • 均值/中位数补填: 将缺失的连续属性用该属性的均值或中位数补上。这种方法简单易行,但可能导致数据分布偏移,并引入偏差。
  • 基于k近邻填补(k-NN Imputation): 找到与当前样本在其他属性上相似的k个邻居,使用这些邻居的平均值或中位数来补填缺失值。这种方法可以保留数据的多样性,但计算量较大。
  • 基于模型预测填补: 使用其他已知的属性预测缺失值,例如通过回归分析或其他机器学习模型预测缺失值。这种方法需要额外建立一个模型,可能增加复杂度。
  • 决策树内部处理缺失值:
    许多决策树算法(如CART、ID3等)在构建树的过程中自然地处理缺失值。具体来说,在分割节点时,可以仅考虑非缺失的样本,并计算这些样本的最优分割点。这种方法不需要先进行预处理,减少了数据丢失带来的损失。
  • 使用符号表示法(Symbolic Representation):
    对于某些情况下,当一个属性完全缺失时,可以将其视为一个新的符号类别,在决策树中单独处理这种情况。这种做法保持了数据的完整性,并避免了通过补填引入偏差。

二十一.KNN算法的原理是什么?有什么优缺点?

(一)、KNN算法的原理

K近邻(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,在分类、回归和排序等任务中广泛应用。它通过计算样本之间的相似性或距离,利用局部数据分布特性来进行预测。

  1. 选择邻居数量:确定一个整数K,表示要选取的最邻近的数量。
  2. 计算距离:使用适当的度量(如欧氏距离)衡量新样本与训练集中所有样本的距离。
  3. 排序并选择邻居:根据计算得到的距离对所有训练样本进行排序,并选择前K个最近的样本作为邻居。
  4. 投票决定类别:统计这K个邻居中各个类别的数量,最多的那个类别即为新样本的预测类别。

(二)、KNN算法的优点

  • 简单直观:实现起来相对容易,核心逻辑易于理解。
  • 无需显式训练:所有计算在预测阶段进行,适合在线学习和小规模数据集。
  • 适应性强:能够处理非线性模式,并且对新数据有良好的适应能力。

(三)、KNN算法的缺点

  • 计算开销大:特别是在大规模数据集上,每次预测都需要重新计算距离,影响效率。
  • 高维数据敏感:面对高维空间时容易出现“维度灾难”,导致数据稀疏化,影响邻居选择的有效性。
  • 不适用于小噪声或异常值:少数离群点可能显著影响邻居的选择和分类结果。

(四)、如何选择K值

  • K应为奇数以避免平局现象。
  • 通过交叉验证等方法找到最优的K值,通常在较小的数值范围内尝试(如1到20)。

(五)、KNN与其他算法的区别与联系

  • 与其他分类器比较:如支持向量机(SVM)侧重于特征空间中的间隔最大化,而KNN是一种基于实例的学习方法。
  • 决策树与随机森林:这些算法通过构建规则或树结构进行划分,而KNN则是直接利用距离进行投票。

二十二.你知道集成学习么?

(一)、集成学习概述

集成学习(Ensemble Learning)是一种机器学习方法,通过将多个学习器组合起来,以改善预测结果的准确性和鲁棒性。这种方法基于“ wisdom of the crowd” 的理念,即通过结合多个弱学习器或分类器,可以得到一个强学习器。

(二)、集成学习的工作原理

集成学习的核心思想是利用多个模型的优势来弥补单个模型的不足。每个模型(称为基学习器)对数据有不同的视角或特征提取方式,它们的预测结果结合起来,通常会比单独使用任何一个模型更准确。

具体来说,集成学习包括以下几个步骤:

  1. 生成多个基学习器:通过某种方法从训练集中生成多个不同的模型,这些模型可能具有不同的算法、参数设置或者对数据的不同采样。
  2. 结合基学习器的预测结果:将所有基学习器的预测结果进行融合,通常采用投票(如多数投票)、加权平均或投票机制等方法。
  3. 优化集成方案:调整各个基学习器在最终决策中的权重,以提高集成模型的整体性能。

(三)、常见的集成学习方法

  1. 袋装法(Bagging)
    • 通过有放回地从训练集中抽取多个不同的样本集,对每个样本集训练一个基学习器。
    • 最终预测结果是基于所有基学习器预测结果的平均或投票。
    • 主要目的是减少模型方差,提高稳定性。
  2. 提升法(Boosting)
    • 通过迭代地调整样本权重,使后续的基学习器更关注之前预测错误较大的样本。
    • 每个基学习器的学习速度和权重都会根据上一轮的性能自动调整。
    • 主要目的是减少偏差,提高模型的准确性。
  3. 堆砌法(Stacking)
    • 使用多个基学习器生成中间预测结果,并将这些结果作为特征输入到一个元学习器中进行最终预测。
    • 元学习器可以根据基学习器的不同输出进行加权或分类。

(四)、集成学习的优势

  1. 提高准确性:通过组合多个模型,集成学习可以减少单一模型的误差,从而提升整体性能。
  2. 增强鲁棒性:集成方法对数据噪声和异常样本具有较强的容错能力,能够提供更稳定的结果。
  3. 适应复杂问题:对于复杂的决策边界问题,集成学习可以通过不同模型的互补特性来找到更好的解决方案。

(五)、集成学习的挑战

  1. 计算开销大:集成方法通常需要训练多个基学习器,并在预测阶段进行融合,这会增加时间和资源消耗。
  2. 模型解释性下降:由于集成方法结合了多个模型的结果,难以直接解释单个模型的决策过程。
  3. 调参难度高:集成模型的性能依赖于多个基学习器的选择、参数设置以及融合方式,调参复杂度较高。

(六)、应用案例

集成学习在多个领域中得到了广泛应用:

  • 图像分类:通过将多个不同的特征提取方法或分类算法结合起来,可以提高图像分类的准确率。
  • 金融风险评估:利用集成学习对多个风险指标进行综合评估,能够更全面地识别潜在风险。
  • 医疗诊断:结合多种诊断指标和模型,提高疾病预测和诊断的准确性。

二十三.你用过XGboost模型么?这个模型和GBDT有什么联系?

(一)、XGBoost 是什么?

XGBoost(Extreme Gradient Boosting)是一种高效的集成学习算法,属于广义线性模型的提升方法。它的核心思想是通过迭代地构建一系列决策树来逐步优化损失函数,最终获得一个强学习器。

(二)、GBDT 是什么?

Gradient Boosting Decision Tree (GBDT) 也称为梯度提升树(Gradient Tree Boosting),是一种基于损失函数的优化算法。它通过依次训练多个弱学习器(通常为决策树),并以梯度下降的方式更新模型参数,从而逐步减少训练数据上的损失。

(三)、XGBoost 和 GBDT 的关系

XGBoost 是一种改进的 Gradient Boosting 方法。虽然两者的核心思想相似,但 XGBoost 在以下几个方面进行了优化和提升:

  1. 效率更高
    • XGBoost 使用了更适合大数据处理的树结构(比如稀疏树),并且优化了特征选择和剪枝算法。
    • 它采用了线性模型的框架,通过特征转换将线性回归、逻辑回归等多种模型纳入同一个优化框架中。
  2. 正则化
    • XGBoost 在损失函数中加入了正则化项(L1 和 L2),以防止过拟合和减少模型复杂度。这种正则化方法使 XGBoost 在高维数据中表现更好。
  3. 并行计算
    • XGBoost 支持分布式并行训练,能够在多核或集群环境中高效处理大规模数据集。
    • 它使用树预测器(Tree Predictors)来加速计算,并通过特征预处理和块处理进一步提升了性能。
  4. 支持的损失函数更多
    • XGBoost 提供了多种内置的损失函数,适用于不同的问题类型,例如回归、分类、排名等。
  5. 处理缺失值的能力
    • XGBoost 在训练过程中可以自动处理缺失值,并为每个特征选择最优填充策略。
  6. 树的生成方式优化
    • XGBoost 使用了预剪枝和后剪枝的方法来控制树的生长,减少模型复杂度并加快预测速度。