机器学习系列03——K近邻算法(KNN)

机器学习系列03——K近邻算法(KNN)

  【前言】上一篇文章写到了机器学习中的一些基础概念,不是特别细致,可能看了之后印象也不是太深刻,不过后面接着写的种种算法会不停的提到相关概念,大家跟着看,慢慢的就都熟悉了,今天大年初一,先给大家拜个年了!祝大家新年快乐!

1、摘要

       KNN算法是机器学习中常用的分类算法,该算法思想简单,非常容易入门,本文从KNN的基本思想开始文章书写,接着以一个简单的例子引入KNN算法,中间重点讲解了KNN的三要素(掌握了KNN的三要素基本上就能对KNN算法有一个最基本的把握,面试也能扯一扯),然后对KNN的三要素做了较详细的讲解,最后给出了KNN算法常见的一些应用。

2、KNN的基本思想

        KNN的基本思想并不复杂,这里一句话简单的说明:K近邻算法:  给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻  近的K个实例, 这K个实例中哪个类别所占的个数多,就把该输入实例划分到这个类中。

3、引入

        如下图所示,有两类不同的训练样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。

        衡量待分类样本的周围的k个邻居的类别,k个邻居中哪个类别较多,就把该类别判给待分类样本。(K近邻思想)
         【注意】:当然K不同,待分类样本被判别的类别也可能不同。

4、K近邻模型三要素

4.1、距离度量(要素之一

        K近邻算法的核心在于找到实例点的邻居。要找邻居就要度量相似性。估量不同样本之间的相似性,通常采用的方法就是计算样本间的“距离”,相似性度量方法有:欧式距离余弦夹角曼哈顿距离切比雪夫距离等。
        K近邻中距离的度量有多种方法,下面主要讲前三种常用的方法,其他的计算方法读者自行学习。
4.1.1、欧式距离

欧式距离来源于欧式空间中的两点之间的距离公式。

二维平面上的两点:

4.1.2、曼哈顿距离

4.1.3、切比雪夫距离

4.1.4、余弦距离


4.2、K值选择(要素之二,重要

若k值较小,只有与输入实例较近(相似)的训练实例才会对预测结果起作用,预测结果会对近邻实例点非常敏感。如果近邻实例点恰巧是噪声,预测就会出错。容易发生过拟合。

若k较大,与输入实例较远的(不相似的)训练实例也会对预测起作用,容易使预测出错。k值的增大就意味着整体的模型变简单。

在应用中,k值一般取较小值。通常通过经验或交叉验证法来选取最优的k值。

4.3、分类决策规则(要素之三,重要

4.3.1、投票表决
少数服从多数,输入实例的k个近邻中哪个类的实例点最多,就分为该类。
4.3.2、加权投票法(优化)
根据距离的远近,对K个近邻的投票进行加权,距离越近则权重越大(比如权重为距离的倒数)。

5、KNN实现过程

(1)计算当前待分类实例与训练数据集中的每个样本实例的距离;

(2)按照距离递增次序排序;

(3)选取与待分类实例距离最小的k个训练实例;

(4)统计这k个实例所属各个类别数;

(5)将统计的类别数最多的类别作为待分类的预测类别

6、KNN的常见应用

  • 数据归类
  • 预测
  • 插值、平滑曲线

7、结束语

        本次文章主要讲了下KNN算法,其应用有一篇博文写的很好,也举了例子,这里给出链接KNN的常见应用。在这里对该博主表示感谢。


K近邻算法是一种简单易用的机器学习算法,它可以用于分类和回归问题。在分类问题中,K近邻算法通过计算待分类样本与训练集中每个样本的距离,找到距离待分类样本最近的K个样本,然后根据这K个样本的类别进行投票,将待分类样本归为票数最多的类别。在回归问题中,K近邻算法通过计算待预测样本与训练集中每个样本的距离,找到距离待预测样本最近的K个样本,然后根据这K个样本的值进行加权平均,得到待预测样本的预测值。 下面是一个使用K近邻算法进行乳腺癌检测分类的示例代码: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # 读取数据集 data = pd.read_csv("breast_cancer.csv") # 将类别变量转换为数值变量 data['diagnosis'] = data['diagnosis'].map({'M': 1, 'B': 0}) # 将特征变量和类别变量分开 X = data.drop(['diagnosis'], axis=1) y = data['diagnosis'] # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 创建K近邻分类器 knn = KNeighborsClassifier(n_neighbors=5) # 训练K近邻分类器 knn.fit(X_train, y_train) # 在测试集上进行预测 y_pred = knn.predict(X_test) # 计算预测准确率 accuracy = accuracy_score(y_test, y_pred) print("预测准确率:", accuracy) ``` 上述代码使用了sklearn库中的KNeighborsClassifier类来创建K近邻分类器,并使用accuracy_score函数计算预测准确率。需要注意的是,K近邻算法对数据的缩放敏感,因此在使用K近邻算法之前,通常需要对数据进行缩放处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值