KNN算法实例(随机点分类可视化+图片数字预测)
随机点分类可视化
KNN算法:
本蒟蒻刚开始学习机器学习,定义这种事还是交给大佬吧
这个博客写的也不错
https://www.cnblogs.com/listenfwind/p/10311496.html
先简单来个例子:
我们想随机取几个点成两份,然后在随机取个点判断这个点最可能属于这两份的哪一个.
可视化就交给matplotlib库来做,介绍这个库的博客
https://www.runoob.com/numpy/numpy-matplotlib.html
from matplotlib.pyplot import *
import numpy as np
k = 5#这个简单的例子,k小一点就行
n=100#两种颜色点的个数
def creatdot(rangex, rangey, dotnum, classtyap):#产生一类点
x = np.random.normal(rangex, rangey, dotnum)
y = np.random.normal(rangex, rangey, dotnum)#这个正态分布不好用...参数太难调
scatter(x, y, color=classtyap)#产生点集
return x, y
def discal(X, Y, markx, marky, classtyap):
for i in range(len(X)):
x = X[i]
y = Y[i]
dis = ((x - markx)**2 + (y - marky)**2)**0.5
dismp.append([dis, classtyap])
return dismp
def creatmark():#产生随机点(参数好难调啊...)
x, y = creatdot(0, 2, 1, "green")
return x, y
markx, marky = creatmark()
dismp = []
X, Y = creatdot(0, 1, n, "blue")
dismp.append(discal(X, Y, markx, marky, "blue"))
X, Y = creatdot(2, 1, n, "red")
dismp.append(discal(X, Y, markx, marky, "red"))
dismp.sort()#排序
print(dismp[2][1])
defclass = {"blue": 0, "red": 0}#一个字典,作用应该不难理解
for i in range(2, k+2):#不知道为啥我这个列表前面有俩空的子列表,搞好久...
#print(dismp[i][1])
defclass[dismp[i][1]] += 1
if defclass["blue"] > defclass["red"]:
s = "class:blue"
else:
s = "class:red"
xlabel(s)#x轴设置为s,方便看233
show()
效果图大概是这样:


图片数字预测
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
#这里是直接使用的knn算法模型
feature=[]
target=[]
for i in range(10):
for j in range(500):
img_arr=plt.imread(f'data/{i}/{i}_{j+1}.bmp')#这里看不明白可以先打开数据集看下...
feature.append(img_arr)
target.append(i)
feature=np.array(feature)
target=np.array(target)
feature=feature.reshape(5000,28*28)#降维
knn.fit(feature,target)
#基本就是板子,上面一个例子可以了解knn算法本质,这个就是要会用库中的模型
knn.score(feature,target)
num_img_arr=plt.imread(f'data/1904_1.jpg')
plt.imshow(num_img_arr)
num_test=[]
for i in range(4):#测试的图片是4个28*28的图片拼接的,为了方便就这样写
num_test.append(num_img_arr[0:28,i*28:(i+1)*28].mean(axis=2))
#其实也可以用自己手写的数字图片,但是还要压缩降噪太麻烦....懒
num_test=np.array(num_test)
print("KNN算法预测图片数字"+'\n'+"预测结果:",end=' ')
print(knn.predict(num_test.reshape(4,28*28)))
用到的数据集
链接:https://pan.baidu.com/s/1rSnmWAAaIxwrwpCXMoi01w
提取码:y0pj
我看见 你


浙公网安备 33010602011771号