2.KNN(k近邻)

本文详细介绍了KNN(k近邻)算法的基本原理及其在分类任务中的应用。主要内容包括K值的选择、距离度量方法(如欧式距离和曼哈顿距离)、分类决策方法(如多数表决法),并探讨了kd树在提高KNN效率中的作用。

KNN(k近邻)

一、KNN概述

    KNN一般是用于分类的机器学习方法

    KNN中重要的三个步骤为:
        1、K值的选择
        2、距离度量的方法
        3、分类决策的方法

二、K值的选择

    K值的选择非常重要。

    在数据中难免存在噪音点,K值选择太小,若测试点周围恰好是噪音点,就容易出现错误;
    若K值选择过大,会导致模型把与数据点偏差较大的点也考虑在内,因此要选择合适的K值

三、距离度量的方法

    点与点之间的距离度量的方法,不同的距离度量方法确定的点周围的点也是不同的。

    Lp距离度量:

    欧式距离,L2距离:

    曼哈顿距离,L1距离:

    p等于∞时:

四、分类决策的方法

    4.1 多数表决法:即判断K个相邻的点中,属于哪一类别的点的数量最多,则该测试的点就属于哪一类别。或者说多数加权表决法。

    4.2 kd树:KNN最简单的方法为一个个扫描数据集中的所有点,若数据集比较大,会比较耗时,因此可以构造kd树,kd树即为二叉树。

    kd树的构建:根据样本点的不同维度的特征对特征空间进行划分,每次划分都是选择其中一维的特征,选择中位数最邻近的点,均等对样本点划分。

    kd树的搜索:搜索的时候,根据构造的kd树上点进行搜索,若该维度的点比树上节点该维度的数值小即去左边,比其大则去右边,依次遍历到叶子节点,把叶子结点作为最近点,然后以该点为圆心,以叶子节点为半径,依次往上进行搜索,若出现结点在比现在的最近点近,则该点为最近点,并且遍历该结点的另外一个结点,若距离比该点大,则依次向上直到遍历到根节点。

五、参考文献

    李航的《统计学习方法》

### 算法简述 k - 近邻kNN算法是一种基本的分类与回归方法。其核心思想是给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,然后根据这 k 个实例的类别来决定新实例的类别(分类问题)或预测(回归问题)。它基于“近朱者赤,近墨者黑”的简单理念,即一个样本的类别往往与其周围邻居的类别相似。 ### 算法模型 kNN 算法没有显式的模型训练过程,它是一种基于实例的学习方法,也被称为“懒惰学习”。其模型就是整个训练数据集本身。在进行预测时,它会计算新样本与训练数据集中所有样本的距离(常用的距离度量有欧氏距离、曼哈顿距离等),然后选取距离最近的 k 个样本。对于分类问题,通过多数表决的方式确定新样本的类别;对于回归问题,则取这 k 个样本的目标的平均作为新样本的预测。 ### 算法实现 以下是使用 Python 的`sklearn`库实现 kNN 分类算法的代码示例,与引用[1]中的代码类似: ```python from sklearn.neighbors import KNeighborsClassifier def classification(train_feature, train_label, test_feature): ''' 使用KNeighborsClassifier对test_feature进行分类 :param train_feature: 训练集数据 :param train_label: 训练集标签 :param test_feature: 测试集数据 :return: 测试集预测结果 ''' # 创建KNeighborsClassifier分类器实例 knn = KNeighborsClassifier() # 使用训练集数据和标签进行模型训练 knn.fit(train_feature, train_label) # 对测试集数据进行预测 predictions = knn.predict(test_feature) return predictions ``` ### 算法应用案例 - **手写数字识别**:在手写数字识别任务中,每个手写数字图像可以被表示为一个特征向量。通过 kNN 算法,可以根据训练集中已知数字图像的特征向量,对新的手写数字图像进行分类,判断它是 0 - 9 中的哪个数字。 - **疾病诊断**:在医学领域,患者的各项生理指标(如血压、血糖、心率等)可以作为特征向量。利用 kNN 算法,可以根据已有的患者病例数据,对新患者是否患有某种疾病进行诊断。 - **电影推荐**:在电影推荐系统中,用户对不同电影的评分可以构成特征向量。通过 kNN 算法找到与目标用户兴趣相似的其他用户,然后根据这些相似用户喜欢的电影为目标用户进行推荐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值