示例代码

首先引入相关包

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')

Python机器学习:KNN算法之01KKN基础-编程知识网

重点来了,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)

Python机器学习:KNN算法之01KKN基础-编程知识网
使得K=6,取距离最近的6个点的距离,依然使用列表生成式的写法

k = 6
topK_y = [y_train[i] for i in nearest[:k]]
print(topK_y) #0有一票1有五票

看看对应的类别标签
Python机器学习:KNN算法之01KKN基础-编程知识网
然后计数,这是一个投票的过程
首先引入包,collection,利用Conter函数进行计数

from collections import Counter
Counter(topK_y)#这是一个投票的过程

类别1
Python机器学习:KNN算法之01KKN基础-编程知识网

votes = Counter(topK_y)

找出投票最多的元素

print(votes.most_common(1))#找出票数最多的元素

1是其类别值,5是其次数
Python机器学习:KNN算法之01KKN基础-编程知识网
把结果存储起来,则x属于类别1
Python机器学习:KNN算法之01KKN基础-编程知识网

Python机器学习:KNN算法之01KKN基础-编程知识网
Python机器学习:KNN算法之01KKN基础-编程知识网