示例代码
首先引入相关包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
数据
Raw_data_X = [[3.4,2.3],[3.1,1.7],[1.3,3.3],[3.6,4.6],[2.2,2.8],[7.4,4.6],[5.7,3.5],[9.17,2.5],[7.8,3.4],[8,0.8]]
print(Raw_data_X)
Raw_data_y = [0,0,0,0,0,1,1,1,1,1]
放入np数组加快程序速度
X_train = np.array(Raw_data_X)
y_train = np.array(Raw_data_y)
可视化一下数据集
plt.scatter(X_train[y_train == 0,0],X_train[y_train == 0,1],color = 'g')
plt.scatter(X_train[y_train == 1,0],X_train[y_train == 1,1],color = 'b')
#knn的过程
x = np.array([8.09,3.36])
plt.scatter(x[0],x[1],color = 'r')
重点来了,KNN的过程
第一种写法,x_tarin是一个有两个数字的列表-[3.4,2.3]…一共循环10次取完
最终将距离全部方法distance
#knn的过程
distances = []#距离
#欧拉距离
for x_train in X_train:d = np.sqrt(np.sum((x_train - x) ** 2))#对每一个元素都平方并求和distances.append(d)#放进distances列表中
更简洁的写法,列表生成式
distances = [np.sqrt(np.sum((x_train - x) ** 2)) for x_train in X_train]
用np.argsort对distances进行从小到大排序然后,返回对应的索引
nearest = np.argsort(distances)#从进到远
print(nearest)
使得K=6,取距离最近的6个点的距离,依然使用列表生成式的写法
k = 6
topK_y = [y_train[i] for i in nearest[:k]]
print(topK_y) #0有一票1有五票
看看对应的类别标签
然后计数,这是一个投票的过程
首先引入包,collection,利用Conter函数进行计数
from collections import Counter
Counter(topK_y)#这是一个投票的过程
类别1
votes = Counter(topK_y)
找出投票最多的元素
print(votes.most_common(1))#找出票数最多的元素
1是其类别值,5是其次数
把结果存储起来,则x属于类别1