机器学习kNN-k近邻算法(一)

机器学习快速入门篇


kNN-k近邻算法

  • 思想极度简单
  • 应用数学知识少(近乎为零)
  • 效果好
  • 可以解释机器学习算法使用过程中的很多细节问题
  • 更完整的刻画机器学习应用的流程

kNN算法概述

kNN(k-Nearest Neighbors)是机器学习中典型的有监督学习中的分类算法,这种分类算法极其简单。其原理大致是这样子,正所谓近朱者赤近墨者黑,kNN算法是通过距离对特征的判断,并把要预测的数据分类到与其特征距离最近的数据中去。而如何去寻找距离则是kNN算法的灵魂所在。我将会在下面的学习中为大家介绍如何寻找距离。


实例教程:

在这里插入图片描述
图中是两个特征的在二维坐标中的分布,其中A类我们就用蓝颜色的点表示,B类我们就用红颜色的点表示,假如这时我们插入要预测的数据,仅仅知道要预测的数据的特征值,但是并不知道其属于A类还是B类。在预测前,我们先取一个k值,我们令k = 6,至于k值如何取,我将会在下面的学习中介绍给大家。我们在二维坐标上绘制要预测的数据,颜色为绿色,如下图:

从图中我们可以分直接的观看到绿颜色的点离蓝颜色的点较近。而kNN算法要做的事情是,在绿色点的周围取距离绿色点最近的k个点,并在这k个点中进行投票决定它是属于A类还是B类,很明显,距离绿色最近的k个点中,蓝色票数为5,而红色票数为1,因此,我们判断要预测的点属于A类。实现过程如下:

首先我们导入我们所需要的包(也就是我们所需要用到的函数)
import numpy as np
from math import sqrt
from collections import Counter
其次我们获取数据,这里的数据是我随机设定的。
raw_data_x = np.array([[42.48132431, 53.49407197],
       [45.8494149 , 46.00393994],
       [53.47615045, 54.94134   ],
       [50.93246162, 57.77594758],
       [42.40088275, 47.70410918],
       [33.02704954, 27.9444391 ],
       [25.87726861, 37.08031903],
       [30.11482033, 25.38937418],
       [34.46997883, 31.33178384],
       [29.72187197, 25.27058888]])
这里我们将A类用1表示,B类用0表示。并将raw_data_x对应的类型存入一个数组中
raw_data_y = [0,0,0,0,0,1,1,1,1,1]
现在我们定义要预测的数据,并求出他与raw_data_x中每一个距离,并将这些距离放入数组中,这里的距离我们使用的是欧拉距离。公式如下:
D i s t a n c e = ∑ i = 1 m ( x i ( a ) ) − ( x i ( b ) ) 2 Distance = \sqrt{\sum\limits_{i=1}^{m}(x^{(a)}_i) - (x^{(b)}_i) ^2} Distance=i=1m(xi(a))(xi(b))2
x = np.array([30.554891,35.546849])
distance = []
for X_train in x_train:
    d = sqrt(np.sum((x-X_train)**2))
    distance.append(d)
最后,我们将这个距离数组调用numpy中argsort这个函数,这个函数返回的也是一个数组,但存放的是距离数组排序后的索引,至于numpy的用法我就不详细介绍了,这是numpy基础教程,想了解的可以点击此处然后我们在raw_data_y这个数组中根据存放是距离数组排序后的索引的数组获取前k个值。并将这k个值对应的个数表示出来,这里我们使用的是collections中的Counter这个函数。
nearest = np.argsort(distance)
topK_y = [y_train[i] for i in nearest[:k]]
Counter(topK_y)
输出:Counter({0: 1, 1: 5})
通过Counter可以看出,在距离预测数据x最近的k个点中,有五个为1,一个为0,即五个是A类,一个是B类。最后我们获取要预测的数据类型。
y_predict = votes.most_common(1)[0][0]
y_predict
输出:1

我们也可以使用scikit-learn中的kNN
大致实现如下:
from sklearn.neighbors import KNeighborsClassifier
kNN_classifier = KNeighborsClassifier(n_neighbors = 6)
kNN_classifier.fit(x_train,y_train)
x = x.reshape(1,-1)
y_predict = kNN_classifier.predict(x)
y_predict
输出:array([1])
相信大家对kNN有了一定的了解,下一篇我将向大家介绍用kNN预测的效果怎样。如何判断用kNN预测的准确率。

附上教程源码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值