附答案 | 最强Python面试题之机器学习篇

写在之前

大家好呀,我是帅蛋。

今天来更新机器学习篇面试,这一部分一共 32 道题。Python 面试八股文尽在帅蛋的【最强Python面试题】,大家一定要记得点赞收藏呀!!!

欢迎和帅蛋聊一聊~扣扣2群:609771600,获取最新秋招信息 & 内推进度,日常聊聊迷茫吹吹牛皮,抱团取暖

顺便提一句,我所有和面试相关的内容都会放在#帅蛋的面试空间# 中,大家可以关注下这个话题~

我会尽我最大的努力帮助到大家哒!!!

以下是正文

1、什么是机器学习

简单的说,机器学习就是让机器从数据中学习,进而得到一个更加符合现实规律的模型,通过对模型的使用使得机器比以往表现的更好,这就是机器学习。

对上面这句话的理解:

数据:从现实生活抽象出来的一些事物或者规律的特征进行数字化得到。

学习:在数据的基础上让机器重复执行一套特定的步骤(学习算法)进行事物特征的萃取,得到一个更加逼近于现实的描述(这个描述是一个模型它的本身可能就是一个函数)。我们把大概能够描述现实的这个函数称作我们学到的模型。

更好:我们通过对模型的使用就能更好的解释世界,解决与模型相关的问题。

2、机器学习与数据挖掘的区别?

数据挖掘和机器学习的区别和联系,周志华有一篇很好的论述《机器学习和数据挖掘》可以帮助大家理解。

数据挖掘受到很多学科领域的影响,其中数据库、机器学习、统计学无疑影响最大。简言之,对数据挖掘而言,数据库提供数据管理技术,机器学习和统计学提供数据分析技术。

由于统计学往往醉心于理论的优美而忽视实际的效用,因此,统计学界提供的很多技术通常都要在机器学习界进一步研究,变成有效的机器学习算法之后才能再进入数据挖掘领域。从这个意义上说,统计学主要是通过机器学习来对数据挖掘发挥影响,而机器学习和数据库则是数据挖掘的两大支撑技术。

从数据分析的角度来看,绝大多数数据挖掘技术都来自机器学习领域,但机器学习研究往往并不把海量数据作为处理对象,因此,数据挖掘要对算法进行改造,使得算法性能和空间占用达到实用的地步。同时,数据挖掘还有自身独特的内容,即关联分析。

而模式识别和机器学习的关系是什么呢,传统的模式识别的方法一般分为两种:统计方法和句法方法。句法分析一般是不可学习的,而统计分析则是发展了不少机器学习的方法。也就是说,机器学习同样是给模式识别提供了数据分析技术。

至于,数据挖掘和模式识别,那么从其概念上来区分吧,数据挖掘重在发现知识,模式识别重在认识事物。

机器学习的目的是建模隐藏的数据结构,然后做识别、预测、分类等。因此,机器学习是方法,模式识别是目的。

总结一下吧。只要跟决策有关系的都能叫 AI(人工智能),所以说 PR(模式识别)、DM(数据挖掘)、IR(信息检索) 属于 AI 的具 体应用应该没有问题。 研究的东西则不太一样, ML(机器学习) 强调自我完善的过程。 Anyway,这些学科都是相通的。

3、什么是机器学习的过度拟合现象?过度拟合产生的原因?如何避免过拟合问题?

如果一味的去提高训练数据的预测能力,所选模型的复杂度往往会很高,这种现象称为过拟合,所表现的就是模型训练时候的误差很小,但在测试的时候误差很大。

过拟合的产生总结一下大概有以下五种原因可能产生:

(1) 建模样本抽取错误,包括(但不限于)样本数量太少,抽样方法错误,抽样时没有足够正确考虑业务场景或业务特点,等等导致抽出的样本数据不能有效足够代表业务逻辑或业务场景

(2) 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系

(3) 在决策树模型搭建中,如果我们对于决策树的生长没有合理的限制和修剪的话,决策树的自由生长有可能每片叶子里只包含单纯的事件数据(event)或非事件数据(no event),可以想象,这种决策树当然可以完美匹配(拟合)训练数据,但是一旦应用到新的业务真实数据时,效果是一塌糊涂。

(4) 建模时的“逻辑假设”到了模型应用时已经不能成立了。任何预测模型都是在假设的基础上才可以搭建和应用的,常用的假设包括:假设历史数据可以推测未来,假设业务环节没有发生显著变化,假设建模数据与后来的应用数据是相似的,等等。如果上述假设违反了业务场景的话,根据这些假设搭建的模型当然是无法有效应用的。

(5) 建模时使用了太多的输入变量,这跟上面第二点(噪音数据)有些类似,数据挖掘新人常常犯这个错误,自己不做分析判断,把所有的变量交给软件或者机器去“撞大运”。须知,一个稳定优良的模型一定要遵循建模输入变量“少而精”的原则的。

上面的原因都是现象,但是其本质只有一个,那就是“业务理解错误造成的”,无论是抽样,还是噪音,还是决策树,神经网络等等,如果我们对于业务背景和业务知识非常了解,非常透彻的话,一定是可以避免绝大多数过拟合现象产生的。因为在模型从确定需求,到思路讨论,到搭建,到业务应用验证,各个环节都是可以用业务敏感来防止过拟合于未然的。

避免过拟合问题:

(1) 重采样Bootstrap

(2) L1,L2 正则化

(3) 决策树的剪枝操作

(4) 交叉验证

4、什么是机器学习的欠拟合?如何避免欠拟合问题?

所谓欠拟合就是模型复杂度低或者数据集太小,对模型数据的拟合程度不高,因此模型在训练集上的效果就不好。

避免欠拟合问题:

(1) 增加样本数量

(2) 增加样本特征的数量

(3) 可以进行特征维度扩展

5、解释有监督和无监督机器学习之间的区别?

监督学习需要训练标记的数据。换句话说,监督学习使用了基本事实,这意味着我们对输出和样本已有知识。这里的目标是学习一个近似输入和输出之间关系的函数。

另一方面,无监督学习不使用标记的输出。此处的目标是推断数据集中的自然结构。

6、偏差和方差之间的权衡是什么?

偏差(模型拟合数据的程度)是指由于ML算法中的假设不正确或过于简单而导致的误差,这会导致过度拟合。

方差(模型基于输入的变化量)指的是由于ML算法的复杂性而导致的错误,从而对训练数据的高水平变化和过度拟合产生了敏感性。

换句话说,简单的模型是稳定的(低方差)但有很大的偏差。复杂的模型容易过拟合,但表达了模型的真实性(低偏差)。误差的最佳减少需要权衡偏差和方差,以避免高方差和高偏差。

7、解释 KNN 和 k-means 聚类之间的区别?

主要区别在于,KNN 需要标记点(分类算法,监督学习),而 k-means 则不需要(聚类算法,无监督学习)。

若要使用 K 最近邻,请使用要分类为未标记点的标记数据。K 均值聚类采用未标记的点,并学习如何使用点之间距离的平均值对它们进行分组。

8、什么是贝叶斯定理?我们为什么用它?

贝叶斯定理是我们在知道其他概率时如何找到概率的方法。换句话说,它提供了先验知识事件的后验概率。该定理是计算条件概率的原则方法。

在 ML 中,贝叶斯定理用于将模型拟合到训练数据集的概率框架中,并用于建立分类预测建模问题(即,朴素贝叶斯,贝叶斯最优分类器)。

9、什么是朴素贝叶斯分类器?我们为什么要使用它们?

朴素贝叶斯分类器是分类算法的集合。这些分类器是具有共同原理的一系列算法。朴素贝叶斯分类器假设某个功能的存在或不影响其他功能的存在或不存在。

换句话说,我们称其为“天真”,因为它假定所有数据集特征都同等重要且独立。

朴素贝叶斯分类器用于分类。当独立性的假设成立时,与其他复杂的预测变量相比,它们更易于实现并产生更好的结果。它们用于垃圾邮件过滤,文本分析和推荐系统。

10、判别模型和生成模型之间有什么区别?

判别模型学习不同类别的数据之间的区别。生成模型学习数据类别。 区分模型通常在分类任务上表现更好。

11、什么是参数模型?提供一个例子

参数模型具有有限数量的参数。您只需要知道模型的参数即可进行数据预测。常见示例如下:线性 SVM,线性回归和逻辑回归。

非参数模型具有无限数量的参数以提供灵活性。对于数据预测,您需要模型的参数和观测数据的状态。常见示例如下:k最近邻,决策树和主题模型。

12、如何根据训练集大小选择分类器?

对于小的训练集,具有高偏差和低方差模型的模型更好,因为它不太可能过拟合。一个例子是朴素贝叶斯。

对于大型训练集,具有低偏差和高方差模型的模型更好,因为它表示更复杂的关系。一个例子是逻辑回归。

13、解释ROC曲线和AUC?

ROC曲线是在所有阈值下分类模型的性能的图形表示。它有两个阈值:真阳性率和假阳性率。

简单来说,AUC( ROC 曲线下方的面积)就是 ROC 曲线下方的面积。AUC 测量 ROC 曲线下从(0,0)到(1,1)的二维区域。它用作评估二进制分类模型的性能指标。

图片说明

14、如何确保您不会过度拟合模型?

我们可以使用三种方法来防止过度拟合:

(1) 使用交叉验证技术(例如k折交叉验证)

(2) 保持模型简单(即减少变量)以减少方差

(3) 使用正则化技术(例如 LASSO)来惩罚可能导致过度拟合的模型参数

15、说明如何处理数据集中的丢失或损坏的数据?

您需要标识查找数据并删除行/列,或将其替换为其他值。

pandas 提供了执行此操作的有用方法:isnull() 和 dropna()。这些使您可以识别并删除损坏的数据。该 fillna() 方法可用于使用占位符填充无效值。

16、解释如何开发数据管道?

数据管道使我们能够采用数据科学模型并对其进行自动化或扩展。常见的数据管道工具是 Apache Airflow,并且使用 Google Cloud,Azure 和 AWS 托管它们。

对于这样的问题,您想解释所需的步骤并讨论您在构建数据管道方面的实际经验。

对于 Google Cloud 主机,基本步骤如下:

(1) 登录到 Google Cloud Platform

(2) 创建一个计算实例

(3) 从 GitHub 中提取教程内容

(4) 使用 AirFlow 概述管道

(5) 使用 Docker 设置虚拟主机

(6) 开发一个 Docker 容器

(7) 打开 Airflow UI 并运行数据管道

(8) 运行已部署的 Web 应用

17、如何解决模型中的高方差?

如果模型具有低方差和高偏差,我们使用装袋算法,该算法使用随机抽样将数据集划分为子集。我们使用这些样本通过单个学习算法生成一组模型。

此外,我们可以使用正则化技术,其中较高的模型系数会受到惩罚,以降低总体复杂度。

18、什么是超参数?它们与模型参数有何不同?

模型参数是模型内部的变量。参数值是根据训练数据估算的。

超参数是模型外部的变量。该值无法从数据中估算出来,通常用于估算模型参数。

19、你正在处理数据集。如何选择重要变量?

(1) 在选择重要变量之前,请先删除相关变量

(2) 使用随机森林和绘图变量重要性图表

(3) 使用套索回归

(4) 使用线性回归以基于p值选择变量

(5) 使用前向选择,逐步选择和向后选择

20、为什么 XGBoost 的性能优于 SVM?

XGBoos 是使用许多树的集成方法。这意味着它会随着自身的重复而提高。

SVM 是线性分隔符。因此,如果我们的数据不是线性可分离的,那么 SVM 需要一个内核来使数据达到可以分离的状态。这可能会限制我们,因为每个给定的数据集都没有完美的内核。

21、以下混淆矩阵的召回率,特异性和精确度是多少?

  • TP /真正肯定:案例是肯定的,并且被预测为肯定

  • TN /真阴性:案件为阴性,预计为阴性

  • FN /假阴性:案件为阳性,但预计为阴性

  • FP /误报:案例为否定,但预计为肯定

图片说明

召回率= 20%

特异性= 30%

精度= 22%

补充

说明:

召回率= TP /(TP + FN)= 10/50 = 0.2 = 20%

特异性= TN /(TN + FP)= 15/50 = 0.3 = 30%

精度= TP /(TP + FP)= 10/45 = 0.2 = 22%

22、使用 scikit-learn 时,是否确实需要在特征值变化很大时调整特征值?

是。大多数机器学习算法都使用欧几里得距离作为度量标准来测量两个数据点之间的距离。如果值的范围相差很大,则不同功能部件中相同更改的结果将非常不同。

23、你的数据集有 50 个变量,但是8个变量的缺失值高于 30%。如何解决这个问题?

您可以采用 3 种一般方法:

  • 只是删除它们(不理想)

  • 为缺失值分配唯一的类别,以查看是否有趋势生成此问题

  • 检查目标变量的分布。如果找到了模式,请保留缺少的值,将其分配给新类别,然后删除其他类别

24、协方差和相关性有什么区别?

相关性是协方差的标准化格式。协方差本身很难做比较。例如:如果我们计算工资(¥)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们会得到不能做比较的不同的协方差。为了解决这个问题,我们计算相关性来得到一个介于-1和1之间的值,就可以忽略它们各自不同的度量。

25、你认为把分类变量当成连续型变量会得到一个更好的预测模型吗?

为了得到更好的预测,只有在分类变量在本质上是有序的情况下才可以被当做连续型变量来处理。

26、在 K-means 或者 KNN,我们是用欧氏距离来计算最近的邻居之间的距离,为什么不用曼哈顿距离?

我们不用曼哈顿距离,因为它只计算水平或者垂直距离,有维度的限制。另一方面,欧氏距离可以用于任何空间的距离计算问题。因为,数据点可以存在于任何空间,欧式距离是更可行的选择。例如:想象一下国际象棋棋盘,象或者车所有的移动的由曼哈顿距离计算的,因为他们是在各自的水平和垂直方向做的运动。

27、给你一个数据集,这个数据集有缺失值,且这些缺失值分布在高中值有1一个标准偏差的的范围内,百分之多少的数据不会受到影响?为什么?

大约有32%的数据将不会受到缺失值的影响。因为,由于数据分布在中位数附近,让我们先假设这是一个正态分布。我们知道,在一个正态分布中,约有68%的数据位于跟平均值(或者众数,中位数)1个标准差范围内,那么剩下的约32%的数据是不受影响的。因此,约有32%的数据将不受缺失值的影响。

28、线程分类器与非线性分类器的区别以及优劣?

如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。  

常用的线性分类器有:LR ,贝叶斯分类,单层感知器,线性回归

常见的非线性分类器:决策树,RF,GBDT,多层感知机

SVM两种都有(看线性核还是高斯核)

线性分类器速度快,编程方便,但是可能拟合效果不会很好

非线性分类器编程复杂,但是效果拟合能力强

29、文本中的余弦距离是什么,有哪些作用?

余弦距离是两个向量的距离的一种度量方式,其值在-1~1之间,如果为1表示两个向量同相,0表示两个向量正交,-1表示两个向量反向。使用TF-IDF和余弦距离可以寻找内容相似的文章,例如首先用TF-IDF找出两篇文章的关键词,然后每个文章分别取出k个关键词(10-20个),统计这些关键词的词频,生成两篇文章的词频向量,然后用余弦距离计算其相似度。

30、什么是数据埋点?

数据埋点我们可以分为两类,其一是页面统计,其二是行为统计

页面统计可以帮我们知晓某个页面被多少人访问了多少次

行为统计是指用户在界面上的操作行为,应用最多的是按钮的点击次数

31、请简要说说一个完整的机器学习项目流程

(1) 抽象成数学问题

明确问题是进行机器学习的第一步。机器学习的训练过程通常都是一件非常耗时的事情,胡乱尝试时间成本是非常高的。

这里的抽象成数学问题,指的我们明确我们可以获得什么样的数据,目标是一个分类还是回归或者是聚类的问题,如果都不是的话,如果划归为其中的某类问题。

(2) 获取数据

数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。数据要有代表性,否则必然会过拟合。而且对于分类问题,数据偏斜不能过于严重,不同类别的数据数量不要有数个数量级的差距。

而且还要对数据的量级有一个评估,多少个样本,多少个特征,可以估算出其对内存的消耗程度,判断训练过程中内存是否能够放得下。如果放不下就得考虑改进算法或者使用一些降维的技巧了。如果数据量实在太大,那就要考虑分布式了。

(3) 特征预处理与特征选择
  
良好的数据要能够提取出良好的特征才能真正发挥效力。

特征预处理、数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。归一化、离散化、因子化、缺失值处理、去除共线性等,数据挖掘过程中很多时间就花在它们上面。这些工作简单可复制,收益稳定可预期,是机器学习的基础必备步骤。

筛选出显著特征、摒弃非显著特征,需要机器学习工程师反复理解业务。这对很多结果有决定性的影响。特征选择好了,非常简单的算法也能得出良好、稳定的结果。这需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。

(4) 训练模型与调优

直到这一步才用到我们上面说的算法进行训练。现在很多算法都能够封装成黑盒供人使用。但是真正考验水平的是调整这些算法的(超)参数,使得结果变得更加优良。这需要我们对算法的原理有深入的理解。理解越深入,就越能发现问题的症结,提出良好的调优方案。

(5) 模型诊断

如何确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术。

过拟合、欠拟合判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。

误差分析 也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题……

诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试, 进而达到最优状态。

(6)模型融合

一般来说,模型融合后都能使得效果有一定提升。而且效果很好。
  
工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。

(7) 上线运行

这一部分内容主要跟工程实现的相关性比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。 不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。

这些工作流程主要是工程实践上总结出的一些经验。并不是每个项目都包含完整的一个流程。这里的部分只是一个指导性的说明,只有大家自己多实践,多积累项目经验,才会有自己更深刻的认识。

32、我们知道,独热编码(OneHotEncoder)会增加数据集的维度。但是标签编码(LabelEncoder)不会。为什么?

用独热编码(OneHotEncoder),数据集的维度(也即特征)增加是因为它为分类变量中存在的的每一级都创建了一个变量。例如:假设我们有一个变量“颜色”。这变量有 3 个层级,即红色、蓝色和绿色。

对“颜色”变量进行一位有效编码会生成含0和1值的 Color.Red,Color.Blue 和 Color.Green 三个新变量。在标签编码中,分类变量的层级编码为0,1和2,因此不生成新变量。标签编码主要是用于二进制变量。

❤️ 欢迎关注我,有问题,找帅蛋,我最看不得别人迷茫!

❤️ 如果你觉得有帮助,希望爱学习的你不要吝啬三连击哟[点赞 + 收藏 + 评论]~

还有小小公众号 【编程文青李狗蛋】,聊聊迷茫吹吹牛皮~

#帅蛋的面试空间##面试八股文##23秋招##机器学习##Python#
全部评论
楼主好文采,点赞收藏
1 回复 分享
发布于 2022-09-16 20:20 广东
今天机器学习大餐,大家帮忙顶起来~
点赞 回复 分享
发布于 2022-09-16 16:39 山东
点赞 回复 分享
发布于 2022-09-16 16:41 北京
如获至宝,楼主分享真好
点赞 回复 分享
发布于 2022-09-16 20:08 广东
满分答案,快快背下来,吓吓面试官
点赞 回复 分享
发布于 2022-09-16 20:11 广东
解题思路全面到位,多面经验积累呀
点赞 回复 分享
发布于 2022-09-16 20:16 广东
牛的
点赞 回复 分享
发布于 2022-09-18 21:34 浙江
感觉把楼主所有帖子都看懂,面试数分不是问题啊!
点赞 回复 分享
发布于 2022-09-23 20:32 浙江

相关推荐

头像 会员标识
10-19 15:58
浙江大学 C++
之前做过一段时间的后端,后跳到量化开发。量化开发实习半年后被leader performance review的时候评价:“基本功不扎实”。在工作期间的确有包括不理解业务等原因导致的工作失误和低效情况。还有就是根据工作特性而缺少的编程语言知识:比如c++怎么写高效(什么时候用忙等什么时候用sleep)、python的一些相同功能的写法哪些高效哪些低效(例:pandas列选择和行选择、按列运算等)。还有就是一些糟糕的开发习惯:比如github提交pr的时候,会因为命名问题、commit数量等被打回。这些在之前都被我归类为特定业务领域的知识,但是现在被leader批评后开始反思,是不是我把一些本该掌握的基本知识忽略掉了。遂问问朋友们我遗漏了哪些基本功?我自己认为的基础知识:1. 计算机科学部分:数据结构,计算机组成,计算机网络,操作系统,数据库系统,编译原理。2. 编程语言部分:c++,python语言的八股+coding编程练习。3. 工程部分:git语句、docker、k8s、conda、pip、linux、g++的常用语句4. 其他:由于业务领域原因,比如pandas这类格外的基本功要求,我也是存在不足的。现在属于是缺啥补啥的阶段。诚问朋友们还有哪些知识领域需要注意学习的?以及不论是我上面提到的知识还是大家补充的知识,有没有比较好的学习平台/方法可以分享一下
点赞 评论 收藏
分享
105 668 评论
分享
牛客网
牛客企业服务