python图像分类识别,Python识别
python中的机器学习使用sklearn库,按类别下载安装图片和mmdpw。sklearnsklearn是python中的一个库,需要安装pip:
安装sklearn但是经常是不能安装成功,因为sklearn依靠的是numpy和scipy,大部分人的numpy都是直接用pip安装的,但是不完整的版本,所以安装sicpy的时候一般会报错。
然后有人想:我去官网下载whl文件然后安装。可惜墙内官网下载速度一般都是10kb/s,还没准备好就经常报错。所以作者在这里给读者留资源,提取代码是sdwi(百度网盘再疯狂也不会是10kb/s)
获得安装包后,将这两个文件放在计算机python目录下的脚本文件中,如下所示:
已经安装了numpy的朋友,请先卸载numpy:pip卸载numpy。
然后打开cmd,cd一直到这个位置,然后:
MKL-CP37-CP37M-WIN _ AMD64。WHL PIP安装SCIPY-1 . 1 . 0-CP37-CP37M-WIN _ AMD64。WHL:我忘了哪个在前面,哪个在后面。有需要的可以试试。
然后就可以pip安装sklearn了。
前期准备:数据集下载。本文介绍了基于数字相关数据集的处理图像(手写)和mmdpw(新闻),所以最好提前下载数据集。
从sklearn.datasets中下载新闻数据集导入fetch _ 20newsgroups # sample _ cate指定需要下载几个主题类别的哪些新闻数据sample _ cate=[alt .无神论, soc .宗教.基督教,Comp.graphics , sci.med , rec.sport.baseball] #需要从网络下载。由于连接到外部网络的速度限制,您可能需要等待几分钟。news groups _ train=fetch _ 20 news groups(subset= train ,categories=sample _ cate,shuffle=true) #获取上面的训练集,下面的代码获取测试集news groups _ test=fetch _ 20 news groups(subset= test ,Categories=sample _ cate,shuffle=true)。将训练集放在newsgroups_train中,测试集放在newsgroups _ test中。
笔迹分类:使用SVM、朴素贝叶斯、KNN,并使用Sklearn自己的digits数据集来训练和识别笔迹。
这个数据集是1797幅8*8像素的灰度图像,在分类器用于手写识别时都是将每张图像看成64维的特征向量。
# the digits dataset digits=datasets . load _ digits()print(digits . descr)显示数字灰度图像(需要plt时导入matplotlib.pyplot)
#显示数据集PLT中的第一幅图像。IMSHOW(数字。图像[0],CMAP=PLT。厘米。Gray _ r,插值=最近)。这个实验需要三个分类器,knn,svm和朴素贝叶斯。具体介绍,谷歌,或者查看文末github库中的word资源。
接下来,创建分类器:
#创建svm分类器svc_clf=svm。SVC(gamma=0.001)#创建KNN分类器KNN _ CLF=KNEIGHBORSCLASSIFIER()#创建朴素贝叶斯分类器nb_clf=MultinomialNB()接下来,划分数据集(新闻中不需要,因为我们下载了数据集并进行划分)
#将数据拆分为训练和测试子集#使用train_test_split将数据集划分为训练集,测试集,其中y_train表示训练集中样本的类别标签,y_test表示测试集中样本的类别标签# test_size=0.5表示一半数据用于测试,另一半用于训练x _ train,x _ test,y _ train,y _ test=train _ test _ split(数据,数字。目标,test _ size=0.5,shuffle=false)。将健身用于训练:
#调用fit方法进行训练,传入训练集样本和样本的类别标签,进行监督学习SVC _ CLF。适合(x火车,y火车)CLF KNN。适合(x列车,y列车)NB _ CLF。拟合(x _ train,y _ train)进行预测:
#调用predict,使用训练好的模型在测试集中进行类别预测,得到预测的类别标签SVC _ predicted=SVC _ CLF。预测(x _测试)KNN _预测=KNN _ CLF。预测(x _测试)NB _预测=NB _ CLF。预测(x _测试
SVC _ images _ and _ predictions=list(zip(数字。images[n _ samples//2:],SVC _ predicted))KNN _ images _ and _ predictions=list(zip(数字。images[n _ samples//2:],KNN _预测))nb _ images _ and _ predictions=list(zip(digits。images[n _ samples//2:],nb_predicted))#在图表的第二行输出支撑向量机在测试集的前四个手写体图像上的分类结果,大家可以在图上看看结果对不对对于ax,(image,svc_prediction) in zip(axes[1,SVC _ images _ and _ predictions[:4]):ax。set _ axis _ off()ax。im show(image,cmap=plt.cm.gray_r,插值= nearest )ax。set _ title(预测:% I % SVC _ Prediction)#在图表的第三行输出近邻算法在测试集的前四个手写体图像上的分类结果,大家可以在图上看看结果对不对# 大家应该可以发现近邻算法把第二列的8这个手写数字识别为3,发生错误对于ax,(image,knn_prediction) in zip(axes[2,KNN _ images _ and _ predictions[:4]):ax。set _ axis _ off()ax。im show(image,cmap=plt.cm.gray_r,插值= nearest )ax。set _ title(预测:% I % KNN _预测)#在图表的第四行输出朴素贝叶斯在测试集的前四个手写体图像上的分类结果,大家可以在图上看看结果对不对对于ax,(image,nb_prediction) in zip(axes[3,nb _ images _ and _ predictions[:4]):ax。set _ axis _ off()ax。im show(image,cmap=plt.cm.gray_r,插值= nearest )ax。set _ title(预测:% I % nb _预测)#绘制出图plt.show()输出性能指标:
# 输出三个分类器的性能指标,大家需要了解二分类、多分类的性能评估指标主要有哪些# 输出支撑向量机的分类性能指标打印(分类器%s的分类报告:\ n % s \ n“%(SVC _ clf,metrics。分类_报告(y _测试,svc _预测)))#输出近邻算法的分类性能指标打印(分类器%s的分类报告:\ n % s \ n“%(KNN _ clf,metrics。分类_报告(y _测试,knn _预测)))#输出朴素贝叶斯的分类性能指标打印(分类器%s的分类报告:\ n % s \ n“%(nb _ clf,metrics。分类_报告(y _测试,nb _预测)))手写字分类总体代码:github链接
运行结果:
新闻mmdpw分类对mmdpw的分来较图像更为简单,因为不需要进行矩阵处理。
过程和手写字处理差不多,适合之后进行预测,然后输出性能指标
从sklearn.datasets导入fetch _新闻组# sample_cate指定需要下载哪几个主题类别的新闻数据sample_cate=[alt。无神论, soc.religion.christian , comp.graphics , sci.med , rec.sport.baseball]#需要从网络上下载,受连接外网速度限制,可能要耐心等待几分钟时间新闻组_ train=fetch _新闻组(子集=训练,类别=样本_分类,洗牌=真)#以上得到训练集,以下代码得到测试集news groups _ test=fetch _ 20新闻组(subset= test ,categories=sample_cate,shuffle=True)print(len(news groups _ train。data))print(len(news groups _ test。数据))导入matplotlib。从sk学习导入数据集、svm、来自sk学习的指标。邻居分类器从sk learn导入knighbors。模型_选择从sk学习导入训练_分割。朴素贝叶斯从sk学习中导入多项式。feature _ extracSVC(kernel= linear )SVC _ clf。fit(cv _ news _ train _ vector,新闻组_ train。target)cv_svc_predict=SVC _ clf。预测(cv _ news _ test _ vector)打印(分类器%s的分类报告:\ n % s \ n“%(SVC _ clf,metrics。分类_报告(新闻组_测试。目标,cv _ SVC _ predict,target _ names=news groups _ test。target _ names)))KNN _ clf=KNeighborsClassifier()knSVC(kernel= linear )SVC _ clf 2。fit(tfi df _ news _ train _ vector,新闻组_ train。target)tfi df _ SVC _ predict 2=SVC _ clf 2。预测(tfi df _ news _ test _ vector)打印(分类器%s的分类报告:\ n % s \ n“%(SVC _ clf 2,metrics。分类_报告(新闻组_测试。目标,tfi df _ SVC _ predict 2,target _ names=新闻组_测试。目标姓名)))KNN clf=运行结果:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。