KNN是将样本归为距样本最邻近的k个样本中大多数所属的类别。
算法实现:
1、计算出每一个样本点与测试点的距离
2、选取距离最近的K个样本,并获取他们的标签 label
3、然后找出K个样本中数量最多的标签,返回该标签
- 导入所需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
- 打开其中一个观察特征
one = plt.imread(r'.\机器学习数据分析源码\day8-KNN算法\1-KNN\exercise\data\0\0_10.bmp')
print(one)
plt.imshow(one,cmap='gray')
- 读取数据,文件名称在存储上有一定规律,可以使用循环来快速读取文件并将数据存放在列表中
x_train = []
x_test = []
y_train = []
y_test = []
for i in range(10):
for j in range(1,501):
if j < 451: #保存到训练数据
x_train.append(plt.imread(r'C:\Users\‘\Desktop\python\数据挖掘\机器学习数据分析源码\day8-KNN算法\1-KNN\exercise\data\{}\{}_{}.bmp'.format(i,i,j)).reshape(-1))
y_train.append(i)
else : #保存到测试数据
x_test.append(plt.imread(r'C:\Users\‘\Desktop\python\数据挖掘\机器学习数据分析源码\day8-KNN算法\1-KNN\exercise\data\{}\{}_{}.bmp'.format(i,i,j)).reshape(-1))
y_test.append(i)
- 数据转换
x_train,y_train,x_test,y_test = np.array(x_train),np.array(y_train),np.array(x_test),np.array(y_test)
- 实例化KNN算法,并训练
knn = KNeighborsClassifier()
knn.fit(x_train,y_train)
- 预测并查看测试结果
y_predict = knn.predict(x_test)
print(y_predict)
- 用matplotlib画出图像并且列出真实值
plt.figure(figsize=(12,15))
im_data = x_test[::20]
im_target = y_test[::20]
im_predict = y_predict[::20]
for i in range(25):
plt.subplot(5,5,(i+1))
plt.imshow(im_data[i].reshape((28,28)))
plt.title('predict:%d'%im_predict[i]+'\ntrue:%d'%(im_target[i]))
网友评论