人工智能面试总结(2)——分类和聚类
该面经总结了春招/秋招各厂高频面试八股,除开围绕简历扣项目细节,公司最喜欢问的还是这些经典算法中涉及的知识点。
人工智能面试-题目指路
(二)分类和聚类
说说常用的分类算法,以及各自的优缺点?
常用的分类算法包括决策树、朴素贝叶斯、逻辑回归、支持向量机和神经网络等。它们的优缺点如下:
- 决策树:易于理解和实现,能够处理离散和连续特征,但容易过拟合,对噪声敏感。
- 朴素贝叶斯:基于概率模型,对缺失数据能够处理,对数据分布不敏感,但假设特征之间相互独立,可能影响准确率。
- 逻辑回归:简单快速,可处理大量特征,输出结果易于理解,但不能处理非线性关系,容易欠拟合。
- 支持向量机:在高维空间中有效,可以处理非线性问题,泛化能力强,但对噪声和缺失数据敏感,参数调整较困难。
- 神经网络:能够处理非线性问题,适用于大规模数据集,但容易过拟合,训练时间较长,难以解释结果。
说说为什么正确率有时不能有效评估分类算法?
分类问题中,有时会遇到样本不平衡或者某些类别的样本数量较少的情况,这时使用正确率(accuracy)评估算法的性能可能会出现问题。因为算法可能会将样本全部预测为数量较多的类别,而准确率会高但实际上分类效果很差。此外,正确率无法表达算法的预测能力是否均衡,对于不同的类别,分类器的性能可能有很大的差异。
说说什么样的分类器最好?
没有最好的分类器,只有最适合的分类器。选择合适的分类器需要考虑数据特征、问题类型、算法的优缺点等多个因素。在实际应用中,需要根据具体问题和数据进行选择和调整。
说说聚类算法有哪些衡量标准?
聚类算法的衡量标准包括SSE(Sum of Squared Errors)、轮廓系数(Silhouette Coefficient)、DB指数(Davies-Bouldin Index)和CH指数(Calinski-Harabasz Index)等。
SSE反映了聚类结果的紧密程度,轮廓系数评价聚类效果的好坏,
DB指数和CH指数分别用于判断聚类结果的紧密性和分离性,评价聚类效果的稳定性和可靠性
(选看)各聚类算法性能比较汇总
各聚类算法的性能比较是一个比较复杂的问题,因为它取决于许多因素,例如数据集的大小和结构、聚类算法的实现方式以及所选的距离度量等。以下是一些聚类算法的性能比较:
- K-Means聚类算法:
- 优点:计算效率高、易于实现和解释、适用于大数据集
- 缺点:对于高维和非球形的数据集表现不佳
- 层次聚类算法:
- 优点:不需要事先指定簇数、能够生成层次化结构、对于小数据集表现不错
- 缺点:计算复杂度高、不适用于大数据集
- 密度聚类算法:
- 优点:对于非球形和噪声数据的聚类效果好
- 缺点:需要事先指定邻域参数、对于高维数据的表现不佳
- 基于模型的聚类算法:
- 优点:对于复杂数据集的表现较好、能够识别数据集中的潜在模型
- 缺点:计算复杂度高、对于大数据集表现不佳
- 谱聚类算法:
- 优点:能够识别非球形和非凸形状的簇、对于高维数据集表现较好
- 缺点:计算复杂度高、需要事先选择近邻的数量
- 均值漂移聚类算法:
- 优点:不需要指定簇数、对于非球形数据的表现较好
- 缺点:计算复杂度高、对于大数据集表现不佳
- DBSCAN聚类算法:
- 优点:能够处理噪声数据和非球形数据、对于数据密度不均匀的数据集表现较好
- 缺点:需要事先指定邻域参数、对于高维数据的表现不佳
说说什么是聚类,你知道哪些聚类算法?
聚类是一种无监督学习方法,旨在将数据样本分成若干个不同的群体,每个群体中的数据点之间具有一定的相似性,而不同群体之间的数据点则有明显的差异性。
常见的聚类算法有:
- K-Means聚类算法
- 层次聚类算法
- 密度聚类算法
- 基于模型的聚类算法
- 谱聚类算法
- 均值漂移聚类算法
- DBSCAN聚类算法
- 二分K-Means聚类算法
- 高斯混合聚类算法
- 局部性敏感哈希(LSH)聚类算法
说说K-Means聚类算法流程?
K-Means聚类算法的流程如下:
- 随机选择k个聚类中心。
- 计算每个样本到每个聚类中心的距离,并将其归为距离最近的聚类。
- 对于每个聚类,重新计算其聚类中心。
- 重复以上步骤直到聚类中心不再改变或达到最大迭代次数。
说说K-Means聚类算法如何调优?
K-Means聚类算法的调优包括以下几个方面:
- 选择合适的聚类个数k。
- 选择合适的距离度量方式。
- 选择合适的初始聚类中心点。
- 标准化或归一化输入数据。
说说K-Means聚类算法如何选择初始点?
- 随机选择k个样本作为初始聚类中心点。
- 通过层次聚类等其他聚类算法得到初始聚类中心点。
- 使用K-Means++算法进行聚类中心初始化,该算法可以得到更优的聚类结果。
说说K-Means聚类聚的是特征还是样本?
K-Means聚类算法聚的是样本,即根据每个样本之间的相似度将它们划分到不同的聚类中。
说说K-Means聚类的特征距离是如何计算的?
K-Means聚类算法可以使用不同的距离度量方式,如欧式距离、曼哈顿距离、闵可夫斯基距离等。通常使用欧式距离作为默认距离度量方式。
说说聚类与分类的区别?
聚类与分类的区别在于聚类是无监督学习,没有标签信息,目的是将相似的样本划分到同一个聚类中;而分类是有监督学习,有标签信息,目的是训练模型将不同类别的样本分开。
手撕K-Means聚类
import numpy as np
class KMeans:
def __init__(self, n_clusters=8, max_iter=300, random_state=0):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.random_state = random_state
def fit(self, X):
# 随机初始化聚类中心
rng = np.random.RandomState(self.random_state)
i = rng.permutation(X.shape[0])[:self.n_clusters]
self.cluster_centers_ = X[i]
for _ in range(self.max_iter):
# 分配样本到最近的聚类中心