机器学习1 - K近邻算法 + 面试题

一、K 近邻算法 (KNN)

  • 是一种非参, 监督学习的分类器 (非参是指KNN不需要假设)
  • 可用于解决分类回归问题
  • 根据点与点之间的距离来捕捉相似性
    • Euclidean Distance-平方差求和再开方
    • Manhattan Distance-坐标差的绝对值求和
    • Hamming Distance

二、K 近邻算法实现步骤

KNN算法有三个重要的考虑因素:K值的选择距离度量方式分类决策规则

  1. 初始化 k 的大小, k 为近邻的数量 (k-the number of neighbor)
  2. 对于在数据集上的每个样本
    • 假设我们有一个数据点
    • 计算每个样本跟这个数据点的距离 (列表: 索引-距离)
  3. 按距离从小到大(升序)对该列表进行排序
  4. 获取前 k个距离最大的索引
  5. 用该索引获取标签
  6. 如果回归,则返回 K 个标签的平均值
  7. 如果是分类,返回 K 个类别标签
import numpy as np
from scipy.stats import mode
# 从零实现 KNN
def predict_datapoint(pt, Xtrain, Ytrain, k):
    
    # For each datapoint in Xtrain, calculate the distance to pt and store
    dists = np.linalg.norm(Xtrain-pt, axis=1)

    # Sort the list of distances (hint: use np.argsort)
    indices = np.argsort(dists)
    
    # obtain the classes (in Ytrain) of the datapoints with the smallest distance to pt
    classes = Ytrain[indices[:k]]
    
    # return the mode of the classes
    return mode(classes).mode[0]

def predict_data(Xtst, Xtrain, Ytrain, k=3):
    #Loop over the datapoints in Xtst and store the prediction for that datapoint
    preds = []
    for x in Xtst:
        preds.append(predict_datapoint(x, Xtrain, Ytrain, k))
        
    # Return the predictions
    return preds
    
# sklearn 实现 KNN
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
model=knn.fit(Xtrain, Ytrain)
Ypred=model.predict(Xtest)

np.all(my_Ypred==Ypred)

三、面试专题

1. 简述一下KNN算法的原理
专业解释
K-NN是一种用于分类和回归的非参数算法。给定一个数据点,它会查找训练集中与其最接近的“K”个邻居,并进行投票或平均以预测标签或值。

小白解释
想象你在一个新城市,你想找到一个好的餐厅。你可能会问附近的几个人 (邻居) 他们的建议,然后选择最多推荐的餐厅。

2. KNN算法的优缺点
优点:

  • 简单易用, 既可以做分类也可以做回归, 时间复杂度为O(n)
  • KNN是非参的, 无需前提假设, 不像线性回归需要假定数
  • 与标签之间是线性关系
  • 对异常值不敏感

缺点

  • 计算量大,尤其是特征数非常多的时候
  • 样本不平衡的时候,对稀有类别的预测准确率低

3. KNN 算法和 K-means 算法有什么区别

  • K-means 是聚类算法,KNN 是分类或回归算法
  • k-means 不需要标签,因此是无监督学习, 而KNN需要标签,因此是有监督的学习

4. 如何选择合适的 K 值
在应用中,k值一般取比较小的值,并采用交叉验证法进行调优

5. 如何解决类别不均衡问题

  • 输入实例的K邻近点中,大数量类别的点会比较多,但其实可能都离实例较远. 方法: 使用权值来改进,距实例较近的点赋予较高的权值,较远的赋予较低的权值
  • 我们限定最近邻的一个最大距离,也就是说,我们只在一个距离范围内搜索所有的最近邻

6. 如何解决计算量过大问题
先将样本按距离分解成组,获得质心,然后计算未知样本到各质心的距离,选出距离最近的一组或几组,再在这些组内引用KNN

四、参考资料

  • Machine Learning Basics with the K-Nearest Neighbors Algorithm
  • K-Nearest Neighbor
  • KNN算法思路以及常见面试题
  • KNN面试问题的总结
  • 机器学习面试题之KNN
  • 《机器学习高频面试题详解》1.5:K近邻(KNN)算法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值