关于机器学习的面试题,你又了解多少呢?

2021-01-27 16:26:48 浏览数 (1)

前面已经陆续分享了几篇关于机器学习的博客,相信刚接触这个领域的朋友们肯定是比较感兴趣的,那么本篇博客让博主为大家介绍一些关于机器学习常见的面试题吧~


1、为什么需要对数值类型的特征做归一化?

  • 简单理解

为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和干克(kg)作为单位,那么身高特征会在1.6-1.8m的数值范围内,体重特征会在50~100kg的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要得到更为准确的结果,就需要进行特征归一化( normalization)处理,使各指标处于同一数值量级,以便进行分析。

总结:K-Means计算模型需要相同量纲的数据,但业务上提供的数据量纲不同,所以需要统一量纲(归一化)

  • 有哪些归一化方式

对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种。

我们也可以根据业务特点,自定义归一化逻辑,就像我们在开发挖掘型标签时,为了执行归一化给RFM打分。

  • 深入理解为什么要归一化

2、类别型特征如何处理的?

类别型特征( Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项內取值的特征。类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。

总结:由于算法需要的特征是数值类型(逻辑回归,支持向量机,K-Means),但是原始数据上的特征大部分为字符串,所以不能直接计算,需要将字符串转为数值型。

  • 从字符转到数值类型转换有哪些方法?

3、距离/相似度如何计算?

在数据分析和数据挖掘以及搜索引擎中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。常见的比如数据分析中比如相关分析,数据挖掘中的分类聚类(K-Means等)算法,搜索引擎进行物品推荐时。

相似度就是比较两个事物的相似性。一般通过计算事物的特征之间的距离,如果距离小,那么相似度大;如果距离大,那么相似度小。比如两种水果,将从颜色,大小,维生素含量等特征进行比较相似性。

问题定义:有两个对象X,Y,都包含N维特征,X=(x1,x2,x3,………,xn),Y=(y1,y2,y3,………,yn),计算X和Y的相似性。常用的有五种方法,如下。

  • 欧几里得距离(Eucledian Distance)

欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很好的计算方式。

因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

  • 曼哈顿距离(Manhattan Distance)

曼哈顿距离也称出租车几何,是由十九世纪的赫尔曼·闵可夫斯基所创词汇,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。

  • 明可夫斯基距离(Minkowski distance)

明氏距离是欧氏距离的推广,是对多个距离度量公式的概括性的表述,看看下图

公式:

从公式我们可以看出,

  • 当p==1,“明可夫斯基距离”变成“曼哈顿距离”
  • 当p==2,“明可夫斯基距离”变成“欧几里得距离”
  • 当p==∞,“明可夫斯基距离”变成“切比雪夫距离”
  • 余弦相似度(Cosine Similarity)

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。

  • 杰卡德相似系数Jaccard Similarity

Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具 体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。

对于上面两个对象A和B,我们用Jaccard计算它的相似性,公式如下

首先计算出A和B的交(A ∩ B),以及A和B的并 (A ∪ B):

然后利用公式进行计算:

  • 皮尔森相关系数(Pearson Correlation Coefficient)

又称相关相似性,通过Peason相关系数来度量两个用户的相似性。计算时,首先找到两个用户共同评分过的项目集,然后计算这两个向量的相关系数。

公式:

4、K-Means算法的缺陷和优点是什么?

优点:

  1. 解决聚类问题的经典算法,简单、快速
  2. 当处理大数据集时,该算法保持可伸缩性和高效率
  3. 当簇近似为高斯分布时,它的效果较好
  4. 时间复杂度近于线性,适合挖掘大规模数据集

缺点:

  1. 必须事先给出k(一般刚开始难以估计)
  2. 对初值敏感,即对于不同的初值,可能会导致不同结果
  3. 不适合非凸形状的簇或者大小差别很大的簇
  4. 对噪声和孤立点敏感

5、K-Means算法的应用场景

  • K-means十大应用案例

K-means算法通常可以应用于维数、数值都很小且连续的数据集,比如:从随机分布的事物集合中将相同事物进行分组。

1.文档分类器

根据标签、主题和文档内容将文档分为多个不同的类别。这是一个非常标准且经典的K-means算法分类问题。首先,需要对文档进行初始化处理,将每个文档都用矢量来表示,并使用术语频率来识别常用术语进行文档分类,这一步很有必要。然后对文档向量进行聚类,识别文档组中的相似性。 这里是用于文档分类的K-means算法实现案例。

2.物品传输优化

使用K-means算法的组合找到无人机最佳发射位置和遗传算法来解决旅行商的行车路线问题,优化无人机物品传输过程。这是该项目的白皮书。

3.识别犯罪地点

使用城市中特定地区的相关犯罪数据,分析犯罪类别、犯罪地点以及两者之间的关联,可以对城市或区域中容易犯罪的地区做高质量的勘察。这是基于德里飞行情报区犯罪数据的论文。

4.客户分类

聚类能过帮助营销人员改善他们的客户群(在其目标区域内工作),并根据客户的购买历史、兴趣或活动监控来对客户类别做进一步细分。这是关于电信运营商如何将预付费客户分为充值模式、发送短信和浏览网站几个类别的白皮书。对客户进行分类有助于公司针对特定客户群制定特定的广告。

5.球队状态分析

分析球员的状态一直都是体育界的一个关键要素。随着竞争越来愈激烈,机器学习在这个领域也扮演着至关重要的角色。如果你想创建一个优秀的队伍并且喜欢根据球员状态来识别类似的球员,那么K-means算法是一个很好的选择。

6.保险欺诈检测

机器学习在欺诈检测中也扮演着一个至关重要的角色,在汽车、医疗保险和保险欺诈检测领域中广泛应用。利用以往欺诈性索赔的历史数据,根据它和欺诈性模式聚类的相似性来识别新的索赔。由于保险欺诈可能会对公司造成数百万美元的损失,因此欺诈检测对公司来说至关重要。这是汽车保险中使用聚类来检测欺诈的白皮书。

7.乘车数据分析

面向大众公开的Uber乘车信息的数据集,为我们提供了大量关于交通、运输时间、高峰乘车地点等有价值的数据集。分析这些数据不仅对Uber大有好处,而且有助于我们对城市的交通模式进行深入的了解,来帮助我们做城市未来规划。这是一篇使用单个样本数据集来分析Uber数据过程的文章。

8.网络分析犯罪分子

网络分析是从个人和团体中收集数据来识别二者之间的重要关系的过程。网络分析源自于犯罪档案,该档案提供了调查部门的信息,以对犯罪现场的罪犯进行分类。这是一篇在学术环境中,如何根据用户数据偏好对网络用户进行 cyber-profile的论文。

9.呼叫记录详细分析

通话详细记录(CDR)是电信公司在对用户的通话、短信和网络活动信息的收集。将通话详细记录与客户个人资料结合在一起,这能够帮助电信公司对客户需求做更多的预测。在这篇文章中,你将了解如何使用无监督K-Means聚类算法对客户一天24小时的活动进行聚类,来了解客户数小时内的使用情况。

10.IT警报的自动化聚类

大型企业IT基础架构技术组件(如网络,存储或数据库)会生成大量的警报消息。由于警报消息可以指向具体的操作,因此必须对警报信息进行手动筛选,确保后续过程的优先级。对数据进行聚类可以对警报类别和平均修复时间做深入了解,有助于对未来故障进行预测。

6、K-Means算法如何确定K值?

肘部法则

  • SSE

手肘法的核心指标是

集合内误差平方和:Within Set Sum of Squared Error, WSSSE

或者叫SSE(sum of the squared errors,误差平方和),公式为

  • 解释

Ci是第i个簇

p是Ci中的样本点

mi是Ci的质心(Ci中所有样本的均值)

SSE是所有样本的聚类误差,代表了聚类效果的好坏。

  • SSE 变化图

根据 SSE 的变化画图, 找到拐点

随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。

当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系如图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数

显然,肘部对于的k值为3(曲率最高),故对于这个数据集的聚类而言,最佳聚类数应该选3。

轮廓系数

a表示C1簇中的某一个样本点Xi到自身簇中其他样本点的距离总和的平均值。

bC2表示样本点Xi 到C2簇中所有样本点的距离总和的平均值。

bC3表示样本点Xi 到C3簇中所有样本点的距离总和的平均值。

定义b = min(bC2 ,bC3)

  • 簇内不相似度:样本和簇内其它样本之间的平均距离

样本i的簇内不相似度a(i)表示C中样本和簇内其它样本之间的平均距离。

a(i)越小,说明样本i越应该被聚类到该簇。

  • 簇外不相似度:样本和簇外其它样本之间的平均距离最小值

样本i的簇外不相似度:b(i) = min { bi1, bi2, bi3 }

bi越大,说明样本i越不属于其他簇。

  • 计算公式
  • 解释

a:样本Xi到同一簇内其他点不相似程度的平均值

b:样本Xi到其他簇的平均不相似程度的最小值

■ S范围在[-1,1]之间。该值越大,越合理 ■ S(i) 接近 1, 说明样本 i 聚类合理 ■ S(i) 接近 -1, 则说明样本 i 更应该分类到另外的簇 ■ 若 s(i) 近似为 0, 则说明样本 i 在两个簇的边界上

  • 轮廓系数

所有样本的s(i)的均值称为聚类结果的轮廓系数,是该聚类是否合理的有效度量。

使用轮廓系数(silhouette coefficient)来确定k,即选择使系数较大所对应的k值。

7、K-Means算法实现-伪代码

出处:https://blog.csdn.net/fox_wayen/article/details/80467233

8、还有哪些其他的聚类算法?

除了k-means 算法以外,聚类算法还有很多,其中“层次聚类算法”较为有名。与k-means 算法不同,层次聚类算法不需要事先设定K簇的数量。

在层次聚类算法中,一开始每个数据都自成一类。也就是说,有n 个数据就会形成n 个簇。然后重复执行“将距离最近的两个簇合并为一个”的操作n -1 次。每执行1 次,簇就会减少1 个。执行n -1 次后,所有数据就都被分到了一个簇中。在这个过程中,每个阶段的簇的数量都不同,对应的聚类结果也不同。只要选择其中最为合理的1 个结果就好。

合并簇的时候,为了找出“距离最近的两个簇”,需要先对簇之间的距离进行定义。根据定义方法不同,会有“最短距离法”“最长距离法”“中间距离法”等多种算法。

9、K近邻法(Knn)与k-Means的区别?

初学者会很容易就把K-Means和KNN搞混,其实两者的差别还是很大的。

KNN

K-Means

目的是为了确定一个点的分类

目的是为了将一系列点集分成k类

KNN是分类算法

K-Means是聚类算法

监督学习,分类目标事先已知

非监督学习,将相似数据归到一起从而得到分类,没有外部分类

训练数据集有label,已经是完全正确的数据

训练数据集无label,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序

没有明显的前期训练过程,属于memory-based learning

有明显的前期训练过程

K的含义:“k”是用来计算的相邻数据数。来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c

K的含义:“k”是类的数目。K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识

K值确定后每次结果固定

K值确定后每次结果可能不同,从 n个数据对象任意选择 k 个对象作为初始聚类中心,随机性对结果影响较大

时间复杂度:O(n)

时间复杂度:O(n*k*t),t为迭代次数

相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。

为了让大家对K最近邻算法(KNN)也有一个了解,这里贴张图大家感受下~


结语

如果以上过程中出现了任何的纰漏错误,烦请大佬们指正?

受益的朋友或对大数据技术感兴趣的伙伴记得点赞关注支持一波?

希望我们都能在学习的道路上越走越远?

0 人点赞