一、什么是KNN算法

knn全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。是机器学习中最为简单和经典的一个算法。

 二、KNN算法距离公式

(1).欧氏距离公式

1、二维空间距离公式

二维空间中,有a(x1,y1)和b(x2,y2)两点,则其两点之间的欧氏距离为:

2、三维空间距离公式

三维空间中,有a(x1,y1,z1)和b(x2,y2,z2)两点,则其两点之间的欧氏距离为:

3、n维空间距离公式

在n维空间中,有a(x_{1},x_{2},...,x_{n})b(y_{1},y_{2},...,y_{n})两点,距离公式表达为

(2)哈曼顿距离

曼哈顿距离也称为L1距离或出租车几何,对于n为空间的两个点x = (x_{1},x_{2},...,x_{n})y = (y_{1},y_{2},...,y_{n}),曼哈顿距离公式为:

                                                                 d = \sum_{i = 1}^{n}|x_{i}-y_{i}|

假设左下角的点为x = (x_{1},x_{2})右上角的点为y = (y_{1},y_{2}),那么它们之间的曼哈顿距离用公式表示为 :

                                                         d = |x_{1}-y_{1}|+|x_{2}-y_{2}|

三、KNN算法核心思想

其实,KNN 的原理就是:当预测一个新样本的类别时,根据它距离最近的 K 个样本点是什么类别来判断该新样本属于哪个类别

 图中粉色的心就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个图中是蓝色正方形多一些,那么就可以将这个心归为蓝色这一类数据。但是,当K=1的时候,判定就变成不一样了。这次变成黑色多一些,所以被归类成黑色这类数据。从这个例子中,我们就能看得出K的取值是很重要的。所以knn算法有两个细节就是 1、k值得选择和2、距离的计算。

四、KNN算法--sklearn

Sklearn (Scikit-Learn) 是基于 Python 语言的第三方机器学习库。它建立在 NumPy, SciPy, Pandas 和 Matplotlib库 之上,里面的 API 的设计非常好,所有对象的接口简单,很适合新手上路。

下面是sklearn安装的方法:在电脑命令行中输入以下代码即可

  pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple/

然后sklearn使用的话大家可以在sklearn的官网上去查询 

https://scikit-learn.org/,  到这个网站去搜索k-nearest neighbors,这里要注意版本的问题,要选择自己对应的版本才行

五、实例

以下是个人对这段代码的一点简单介绍

#import numpy as np
#from sklearn.neighbors import KNeighborsClassifier
  1. numpy:专门用于处理数组和矩阵数据
  2. KNeighborsClassifier:是 scikit-learn 中的一个分类器,用于实现 KNN 算法。
  3. np.loadtxt:从文件 datingTestSet2.txt 中读取数据。
  4. X= data[ :,:-1]#表示获取data数据中的每一行,每一列,但是不包含最后一列
  5. y= data[:,-1] #表示获取data数据中的最后一列。
  6. KNeighborsClassifier:创建一个 KNN 分类器对象。
  7. neigh.fit(x,y)#fit训练,x,y,模型就训练好了
  8. neigh.predict用于预测新样本的类别。
  9.           [[36429,3.570968,0.832254]]:是一个新样本,包含 3 个特征值。输出是该样本的预测类别。
  10.                [[9744,11.440364,0.760461],
  11.                [16191,0.100000,0.605619],
  12.                [42377,6.519522,1.058602],
  13.                [27353,11.475155,1.528626]]  是四个学生的数据
  14. predict_data:是一个包含多个样本的列表,每个样本有 3 个特征值。
  15. neigh.predict(predict_data):对每个样本进行预测,并返回预测的类别列表
  16. 下面是该段代码运行结果

六、优缺点 

优点:简单易用,相比其他算法,KNN算是比较简洁明了的算法。
            模型训练时间快
            预测效果好
            对异常值不敏感
缺点:对内存要求较高,因为该算法存储了所有训练数据
           预测阶段可能很慢
           对不相关的功能和数据规模敏感。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐