0、:前言
这篇文章能够帮助你从数据到模型的整个过程实现 不过至于安装第三方库等基础问题,本文不涉及,因为确实不难,搜一搜一大把 本此实验运行环境为jupyter,当然通过pycharm也是可行的
1、数据:
手写数字共5000组数组 其中一共有0-9,10组数据,每一组中有500张对应的手写数字的图片 数据资料: 链接:https://pan.baidu.com/s/1gTi-0xjDjbVUK_p_AzkZrw 提取码:1234
2、数据预处理:
拿到数据后把数据解压到和代码同一级的目录当中 这部分重点是把图片数据转换为可以输入模型的二维数组型数据 用到的函数解答:
plt.imshow()函数是matplotlib库中的一个函数,它用于显示图像。这个函数接受一个二维或三维的数组作为输入,表示图像的数据。然后,它将数组的值映射到颜色空间,以显示图像。在plt.imshow()函数中,cmap是一个参数,代表色彩映射(colormap)。在图像处理中,我们通常将图像表示为一个二维数组,数组的每个元素代表图像的一个像素。每个像素的值通常是一个介于0和255之间的整数,表示该像素的灰度级别。然而,我们通常不能直接看到这些数字,因为它们在视觉上可能没有明显的差别。相反,我们通常将每个像素的值映射到一个连续的色彩空间,这样我们就可以在屏幕上显示图像了。有许多不同的colormap可以选择,比如:‘gray’:灰度colormap、‘hot’:红色到白色的热图colormap、‘cool’:蓝色到绿色的colormap、‘Jet’:从蓝色到红色的colormap、‘hsv’:HSV色彩空间的colormap。 代码
img = plt. imread( './手写数字识别/0/0_1.bmp' )
display( img. shape)
plt. imshow( img, cmap= 'gray' )
3、实现:
data = [ ]
target = [ ]
for i in range ( 10 ) :
for j in range ( 1 , 501 ) :
img = plt. imread( f'./手写数字识别/ { i} / { i} _ { j} .bmp' )
data. append( img)
target. append( i)
data = np. array( data) . reshape( 5000 , - 1 )
target = np. array( target) . reshape( 5000 , - 1 )
print ( 'data的形状:' , data. shape, 'target的形状:' , target. shape)
from sklearn. model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split( data, target, test_size= 0.2 )
from sklearn. neighbors import KNeighborsClassifier
knn = KNeighborsClassifier( )
knn. fit( x_train, y_train)
knn. score( x_test, y_test)
choice = np. random. randint( 1 , 1000 , 10 ) . tolist( )
plt. figure( figsize= ( 5 * 10 , 2 * 10 ) )
for i in range ( 10 ) :
re = plt. subplot( 2 , 5 , i+ 1 )
re. imshow( x_test[ choice[ i] ] . reshape( 28 , - 1 ) , cmap= 'gray' )
re. set_title( f'real: { y_test[ choice[ i] ] [ 0 ] } ,\npredict: { y_pred[ choice[ i] ] } ' , fontsize= 40 ,
color = 'k' if y_test[ choice[ i] ] [ 0 ] == y_pred[ choice[ i] ] else 'r' )
4、补充:
如果在划分了数据集之后,要显示test当中的一个图片,应该先把图片数据变回原来的维度,然后再显示 关于如何改变数组维度的问题