基本机器学习面试问题 --- 理论/算法2

线性回归

  • 如何学习参数:最小化损失函数
  • 如何最小化损失函数:梯度下降
  • 正则化:
    • L1(Lasso 回归):可以将某个系数缩小到零,从而执行特征选择;
    • L2(Ridge 回归):以同样的比例收缩所有系数 ; 几乎总是胜过 L1;
    • 合并(弹性网)。
  • 假定特征和标签之间存在线性关系
  • 可以添加多项式和交互特征以增加非线性

逻辑回归

  • 用于二分类问题的广义线性模型(GLM)
  • 将 sigmoid 函数应用于线性模型的输出,将目标压缩到范围 [0,1]
  • 通过阈值做出预测:如果输出> 0.5,预测 1;否则预测 0
  • softmax 函数:处理多分类问题

KNN

给定一个数据点,使用一定的距离度量(例如欧几里德距离)计算 K 个最近的数据点(近邻)。对于分类,可以取大多数近邻的标签;对于回归,我们采用标签值的均值。

对于 KNN 来说,我们不需要训练模型,我们只是在推理时间内进行计算。这可能在计算上很昂贵,因为每个测试样本都需要与每个训练样本进行比较以了解它们有多接近。

有近似的方法可以有更快的推断时间,通过将训练数据集划分成区域。

注意,当 K 等于 1 或其他小数字时,模型容易出现过拟合(高方差),而当 K 等于数据点数或更大的数字时,模型容易出现欠拟合(高偏差)。

SVM

  • 可以执行线性,非线性或异常值检测(无监督)
  • 大间距分类器:不仅有一个决策边界,而且希望边界距离最近的训练点尽可能远
  • 最接近的训练样例被称为支持向量,因为它们是绘制决策边界所基于的点
  • SVM 对特征缩放比较敏感

决策树

  • 非参数,有监督的学习算法
  • 给定训练数据,决策树算法将特征空间划分为区域。为了推断,我们首先观测测试数据点落入哪个区域,并取平均标签值(回归)或多数标签值(分类)。
  • 构造:自上而下,选择一个变量来分割数据,使得每个区域内的目标变量尽可能均匀。两个常见的指标:基尼不纯或信息增益,在实验中两者结果差异不大。
  • 优点:简单地理解和解释,模仿人类决策过程
  • 坏处:
    • 如果我们不限制树的深度,可以容易地过度拟合可能不够鲁棒:训练数据的小改动
    • 可能导致完全不同的树
    • 不稳定性:由于其正交决策边界,对训练集旋转敏感

Bagging

为了解决过拟合问题,我们可以使用称为 bagging(bootstrap aggregating)的集成方法,它减少了元学习算法的方差。bagging 可以应用于决策树或其他算法。

这是一个很好的例子:

  • bagging 是有放回采样。在子采样无放回时,则称为 pasting。
  • bagging 因其对性能的提高而广受欢迎,也因为单独的机器学习模型可以并行训练,并且可以很好地扩展。
  • 当机器学习模型尽可能彼此独立时,集成方法效果最好
  • 投票: 软投票(对所有算法的预测概率取平均值)通常比硬投票更有效。
  • 袋外(out-of-bag)实例(37%)可以作为 bagging 的验证集。

随机森林

随机森林通过增加一些随机性来进一步改善 bagging。在随机森林中,只随机选择一部分特征来构建树(而不是子采样实例)。好处是随机森林减少了树之间的相关性。

假设我们有一个数据集。有一个信息增益很高的特征,以及一些预测性较弱的特征。在 bagging 树中,大多数树将在顶部拆分时使用这个预测性很强的特征,因此使得大部分树看起来相似,并且高度相关。与互不相关的结果相比,对高度相关的结果取平均不会大量降低方差。在随机森林中,每一次划分节点我们只考虑特征的一个子集,并因此通过引入更多不相关的树来进一步减少方差。

在实践中,调整随机森林需要拥有大量的树(越多越好,但需要考虑计算约束)。此外,用 min_samples_leaf(叶节点的样本的最小数量)来控制树大小和过拟合。

特征的重要性:

在决策树中,更重要的特征可能更接近树的顶部。通过计算它在森林中所有树上出现的平均深度,我们可以得到一个特征对于随机森林的重要性。

Boosting 树

原理

Boosting 树以迭代方式建立在弱学习器身上。在每次迭代中,都会添加一个新的学习器,而所有现有的学习器都保持不变。所有的学习器根据他们的表现(例如,准确性)进行加权,并且在加入弱学习器之后,对数据进行重新加权:错误分类的样例获得更多的权重,而正确分类的样例减少权重。因此,未来的弱学习器会更多地关注之前的弱学习器错误分类的样例。

与随机森林(RF)的区别

  • RF 是并行训练,而 Boosting 是按顺序训练
  • RF 降低了方差,而 Boosting 通过减少偏差来减少误差

XGBoost(极端梯度提升):

XGBoost 使用更正则化的模型来控制过拟合,从而使其具有更好的性能。

Stacking

  • 不是使用简单的函数 (例如硬投票) 来集成单个学习器的预测,而是训练一个模型来执行这个集成过程。
  • 首先将训练集分为两个子集:第一个子集用于训练第一层的学习器
  • 接下来,第一层学习器被用于对第二子集进行预测(元特征),并且这些预测被用于在第二层训练另一个模型(以获得不同学习器的权重)
  • 可以在第二层中训练多个模型,但这需要将原始数据集分为三部分

MLP

MLP,多层前馈神经网络。每一层可以有多个神经元,下一层中每个神经元的输入是上一层中所有神经元输出的线性或非线性组合。为了训练网络,逐层反向传播误差。理论上 MLP 可以近似任何函数。

CNN

Conv 层是卷积神经网络的基础结构。Conv 层由一组可学习的滤波器(例如 5 × 5 × 3,宽×高×深)组成。在前向传递期间,我们将滤波器在输入上滑动(或更准确地说,卷积)并计算点积。当网络反向传播误差时,再次进行学习。

初始层可以捕捉低级特征(如角度和边缘),而后面的层可以学习前一层低级特征的组合,因此可以表示高级特征,如形状和目标部分。

RNN 和 LSTM

RNN 是神经网络的另一个范式,有不同层的神经元,每个神经元不只把前一层神经元的输出作为输入,而且把同一层的前一个神经元的输出作为输入。

这看起来很棒,但实际上由于相同矩阵的一系列乘法运算,会造成梯度消失或梯度爆炸,使 RNN 几乎不能运作。为了解决这个问题,我们可以使用 RNN 的一个变种,长短时记忆(LSTM),它能够学习长期的依赖关系。

LSTM 背后的数学算法可能相当复杂,但直观上 LSTM 引入了输入门 - 输出门 - 遗忘门 - 记忆单元(内部状态)

LSTM 模仿人类的记忆过程:忘记旧的东西(旧的内部状态×遗忘门)并重新输入(输入节点×输入门)

word2vec

  • 浅层,双层神经网络,经过训练可以构建词语的语言上下文
  • 以一个大的语料库为输入,产生一个向量空间,一般为几百维,并且语料库中的每个单词指向空间中的一个向量
  • 关键的思想是上下文:经常出现在同一语境中的单词应该具有相同或相反的意义。
  • 两种风格
  • 连续词袋(CBOW):给定周围上下文单词的窗口,模型预测出当前单
  • skip gram:使用当前单词预测周围的上下文单词

生成与判别

  • 判别算法模型 p(y | x; w),即给定数据集和学习参数,得出 y 属于特定类的概率是多少。判别算法不关心数据是如何生成的,它只是对给定的样例进行分类
  • 生成算法尝试对 p(x | y)进行建模,即给定特征的类别,得出它的分布。生成算法模拟如何生成数据。

给定一个训练集,像逻辑回归或感知器这样的算法会试图找到一条直线,即决策边界,将大象和狗分开。然后,将新的动物分类为大象或狗,算法会检查样本在决策边界的哪一边,并据此做出预测。

下面是一种不同的方法。首先,看大象,我们可以建立一个大象看起来像什么的模型。然后,看着狗,我们可以建立一个狗的样子的单独模型。最后,为了对新动物进行分类,我们可以将新动物与大象模型进行匹配,并将其与狗模型进行匹配,看看新动物看起来更像大象还是更像我们在训练集中看到的狗。

参数与非参数

  • 用一组固定数量的参数(与训练样本的数量无关)对数据总结的学习模型称为参数模型。
  • 训练前未确定参数数量的模型。非参数并不意味着他们没有参数。相反,随着数据量的增加,非参数模型(可能)会变得越来越复杂。

参考文章

https://github.com/ShuaiW/data-science-question-answer#data-science-question-answer

https://github.com/ShuaiW/data-science-question-answer#recommender-system

https://www.reddit.com/r/MachineLearning/comments/7w8e0j/d_how_to_prep_for_a_deep_learningmachine_learning/?st=jdi63nwq&sh=61447041

猜你喜欢

转载自blog.csdn.net/zwqjoy/article/details/82426633