机器学习——KNN算法
一、KNN是什么?
knn是一种监督学习算法。
通过举例来通俗理解:
假如有一红一绿两个阵营,若在其中红方阵营中有一未知阵营,通过它的相邻数据点的阵营判断该阵营属于哪个阵营。
K最近邻,就是k个最近邻居的意思,假设k=3,代表取该阵营3个邻居来做判断
k的取值:K值应大于分类的种数,以阵营分类为例,当k=1时容易受噪点影响,而无法准确判断;k=2时,倘若邻居为一红一绿则结果无法判断。
二、KNN如何判断
knn算法通过计算测试点与其他所有数据点的距离,取出k个最近的数据点进行判断比较
计算距离一般使用欧氏距离。
三、KNN算法原理
1.自己构造
代码如下(示例):还是以红绿阵营为例,判断一未知阵营属于哪一方
首先准备10个数据点user_data和对应的标签集user_label
import matplotlib.pyplot as plt
import numpy as np
user_data = np.array([
[0.3,0.6],
[2.3,1.5],
[4.8,5.5],
[1.3,5.2],
[6.3,8.9],
[7.4,3.2],
[3.7,0.3],
[5.4,4.3],
[8.1,6.2],
[9.4,7.8]
])#数据点
user_label = np.array([0,0,0,0,0,1,1,1,1,1])#打标签,分类阵营
test_data = np.array([2.9,5.6])#测试点
d = []
#求所有点到测试点的距离
for i in user_data:
len = np.sqrt(np.sum(np.square(test_data - i)))#np.square矩阵平方公式
d.append(len)
#把列表里面数据按照从小到大排列,输出下标索引
d_index = np.argsort(d)
print(d)
print(d_index)
c = []
for i in d_index[:3]:
c.append(user_label[i])#将最近的3个邻居放在c中
print(c)
numb0 = 0
numb1 = 0
for i in c:
if i == 0:
numb0 += 1
else:
numb1 += 1
if (numb0>numb1):
print("是0类")
else:
print("是1类")
2.调用sklearn库
python中强大的库,已经封装好了线性回归和逻辑回归函数,我们可直接调用
from sklearn.neighbors import KNeighborsClassifier #导入库
#分类器参数n_neighbors默认为5,
Knn = KNeighborsClassifier(n_neighbors = 3)#设置邻居数为3
Knn.fit(user_data,user_label)#传入数据x和y,两个参数分别为数据和标签
c = knn.predict(test)#test为测试点,直接计算距离
print(c)