【K近邻】

本文介绍了K近邻(KNN)算法的基础知识,包括KNN分类和回归的实现。KNN分类在scikit-learn中通过KNeighborsClassifier实现,回归则使用KNeighborsRegressor。模型构建只需保存训练集,预测时查找k个最近邻并采用投票法或平均值。KNN的重要参数包括邻居个数和距离度量方法。虽然KNN易于理解和实现,但存在预测速度慢和处理高维数据效果不佳的问题。文中还展示了交叉验证选择最优参数k的代码框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 构建此模型只需要保存训练集即可。
    要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的k个数据点,然后将找到的数据点的标签(投票法)赋值给这个新数据点。

k近邻分类

  • k近邻分类算法是在neighbors模块的KNeighborsClassifier类中实现的。我们需要将这个类实例化为一个对象,然后才能使用这个模型。

k近邻回归

  • 用于回归的k近邻算法是在scikit-learn的KNeighborsRegressor类中实现的。
  • 对于回归问题,clf.score()方法返回的是R^2系数,也叫做决定系数,是回归模型预测的优度度量,位于0-1之间。决定系数等于1对应完美预测,等于0对应常数模型,即总是预测训练集响应(y_train)的平均值。

总结

  • KNeighbors有2个重要参数:
    邻居个数:在实践中,3-5个邻居个数往往可以得到较好的结果
    数据点之间距离的度量方法:默认使用欧氏距离

在这里插入图片描述

  • 如何设置超参数:
    ① train-test-valid
    ② 交叉验证:Split data into folds , try each fold as validation and average the results
    在这里插入图片描述

  • 优点:容易理解、构建速度快

  • 缺点:如果训练集很大,预测速度会比较慢;对于有很多特征(几百或更多)的数据集往往表现不好,对于大多数特征的大多数取值为0的数据集(稀疏数据集)来说效果尤其不好。

实例

完整代码:k近邻分类算法
代码框架:认识数据->划分数据->构建模型->保存训练集->计算距离->预测标签->调整最优参数k(交叉验证)

#交叉验证(选择最优参数k)
for k in k_choices:
    curr_acc=[]
    for i in np.arange(num_folds):
        indx = np.array([j for j in range(num_folds) if j!=i])
        X_test_n=X_train_folds[i]
        y_test_n=y_train_folds[i]
        X_train_folds[indx]
        X_train_n=np.concatenate(X_train_folds[indx],axis=0)
        y_train_n=np.concatenate(y_train_folds[indx],axis=None)
        
        classifier = KNearestNeighbor()
        classifier.train(X_train_n, y_train_n)
        dists = classifier.compute_distances_no_loops(X_test_n)#计算数据点之间的距离
        y_test_n_pred = classifier.predict_labels(dists, k)#根据距离预测
        num_correct = np.sum(y_test_n_pred == y_test_n)
        accuracy = float(num_correct) / len(y_test_n)
        curr_acc.append(accuracy)
    k_to_accuracies[k]=curr_acc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值