机器学习--digits手写字体
1.导入数据
import numpy as np
import matplotlib.pyplot as plt
from sklearn import neighbors,datasets,cross_validation #交叉验证#定义一个加载数据集函数
def load_classification_data():digits = datasets.load_digits() #手写数字print('数据集说明,大小:',digits.data.shape ) #data中的图片数据是一行64列print('一张图片的数据:',digits.data[0]) #图片数据print('数据集中的键:',digits.keys())print( 'target:',digits.target[0:50])print( 'images:',digits.images[0:1]) #image中是多个二维数组成 每个二维数组就是一个数据x_train = digits.datay_train = digits.target# cross_validation.train_test_split() 数据集与测试集的拆分 random_state=0 随机return cross_validation.train_test_split( x_train,y_train,test_size=0.25,random_state=0,stratify=y_train) #stratify分层采样#加载训练数据以及测试数据
x_train,x_test,y_train,y_test=load_classification_data()
得到以上输出结果,如下图:
2.数据分析
digits手写数据集其实是1797组8*8的手写数字图像的像素点集合。有10个分类,代表了“0,1,2,…,9”这是个数字。特征维度为64,对应了每组数据的8 * 8个像素点。
通过分析,我们可以查看一下具体数据
print( y_train[0:20]) #输出前二十个数据
print( x_train[0:1]) #输出第一组数据
print(y_train[0:1]) #输出y_train第一个数据
#多分类问题 数据集中是图片数据 8*8矩阵
3.显示图片
通过上述介绍,我们已经了解到了这是一个手写的数据集,通过每一组数据可以得到某些数据,那么下面我们来具体看一下:
#显示一下图片
digits = datasets.load_digits() #加载数据
import matplotlib.pyplot as plt
%matplotlib inline
print( x_train[0:1] )
plt.figure(figsize=(8,8))
plt.imshow( digits.images[1])
print( '标准结果:',digits.target[1])
上面的图片就是得到的手写的**‘1’**
4.测试KNeighborsClassifier的用法
def test_KNeighborsClassifier(*data): # *代表自动解包 *data->列表参数'''测试KNeighborsClassifier的用法:param data 可变参数 是一个元组 要求其元素为:训练样本集、测试样本集、训练样本的标记、测试样本的标记:return: None'''X_train,X_test,y_train,y_test = dataclf = neighbors.KNeighborsClassifier()clf.fit(X_train,y_train)print( "模型在训练集中的评分:%f" % clf.score(X_train,y_train))print("模型在测试集中的评分:%f" % clf.score(X_test,y_test))test_KNeighborsClassifier(x_train,x_test,y_train,y_test)
5.做交叉验证
def test_KNeighborsClassifier_k_w(*data):'''测试 KNeighborsClassifier 中 n_neighbors 和 weights 参数(投票策略) 的影响:param data:可变参数。它是一个元组,这里要求其元素依次为:训练样本集、测试样本集、训练样本的标记、测试样本的标记:return: None'''X_train,X_test,y_train,y_test=data#k的取值 从1到 数据集的大小( train: 1749*0.75 =1190)# linspace:在指定的间隔内返回均匀间隔的数字# num:#生成100个数 endpoint:是否包括最后一个数值 1 1189Ks= np.linspace(1,y_train.size,num = 100, endpoint=False,dtype='int')print( len(Ks) ) #100print( Ks )weights = ['uniform','distance'] #uniform权重相等 distance距离权重fig = plt.figure( figsize=(10,10))ax = fig.add_subplot(1,1,1) #子图 ax 画布的轴#绘制不同 weights 下,预测随机得分随 n_neighbors 的曲线for weight in weights:training_scores=[] testing_scores = []for K in Ks:clf = neighbors.KNeighborsClassifier(weights=weight,n_neighbors = K )clf.fit(X_train,y_train)testing_scores.append( clf.score(X_test,y_test))training_scores.append(clf.score(X_train,y_train))#k值为x,评分为yax.plot(Ks,testing_scores,label="testing score:weight=%s"%weight)ax.plot(Ks,training_scores,label="training score:weight=%s"%weight)ax.legend(loc='best')ax.set_xlabel("K")ax.set_ylabel("score")ax.set_ylim(0,1.05) #y刻度的极限ax.set_title("KNeighborsClassifier")plt.show()test_KNeighborsClassifier_k_w(x_train,x_test,y_train,y_test)
6.超参数搜索/网格搜索
此处具体参数设置请参照官网 :GridSearchCV
from sklearn.model_selection import GridSearchCV
ps = [1,2,10] #指定 距离度量算法
ks = [4,5,6,7,8,9,10] #指定k的数量
ws = ['uniform','distance'] #指定权重算法
param_grid = {'p':ps,'n_neighbors':ks,'weights':ws}
clf = GridSearchCV(neighbors.KNeighborsClassifier(),param_grid,cv = 5)
clf.fit( x_train,y_train)
输出最优参数组合
print('最佳结果:%0.3f' % clf.best_score_ )
print('最优参数组合:')
best_parameters = clf.best_estimator_.get_params()
for param_name in sorted(param_grid.keys() ):print( '\t%s:%r' %(param_name,best_parameters[param_name]))
使用最优参数重新测试
digits=datasets.load_digits()
clf=neighbors.KNeighborsClassifier(p=2,n_neighbors=4,weights='uniform')
clf.fit(x_train,y_train)
y_predict = clf.predict(x_test)
print('KNN Classifier 准确率为:' ,clf.score(x_test,y_test))
机器学习--digits手写字体相关推荐
- 基于kNN的手写字体识别——《机器学习实战》笔记
看完一节<机器学习实战>,算是踏入ML的大门了吧!这里就详细讲一下一个demo:使用kNN算法实现手写字体的简单识别 kNN 先简单介绍一下kNN,就是所谓的K-近邻算法: [作用原理]: ...
- numpy完成手写字体识别(机器学习作业02)
numpy完成手写字体识别(机器学习02) 参考代码:mnielsen/neural-networks-and-deep-learning: 参考讲解:深度学习多分类任务的损失函数详解 - 知乎 (z ...
- 机器学习SVM--基于手写字体识别
手写字体optdigits识别: 每一行代表一个手写字体图像,最大值为16,大小64,然后最后一列为该图片的标签值. import numpy as np from sklearn import sv ...
- matlab基于SVM的手写字体识别,机器学习SVM--基于手写字体识别
每一行代表一个手写字体图像,最大值为16,大小64,然后最后一列为该图片的标签值. import numpy as np from sklearn import svm import matplotl ...
- 识别手写字体app_我如何构建手写识别器并将其运送到App Store
识别手写字体app 从构建卷积神经网络到将OCR部署到iOS (From constructing a Convolutional Neural Network to deploying an OCR ...
- pytorch应用于MNIST手写字体识别
前言 手写字体MNIST数据集是一组常见的图像,其常用于测评和比较机器学习算法的性能,本文使用pytorch框架来实现对该数据集的识别,并对结果进行逐步的优化. 一.数据集 MNIST数据集是由28x ...
- 基于模板匹配的手写字体数字识别-含Matlab代码
目录 一.引言 二.系统知识的表示与组织 2.1 规则前提条件的描述 2.2 规则结论的表示 2.3 知识库的组织 三.手写字体数字识别算法流程 四.识别结果 五.参考文献 六.Matlab代码获取 ...
- 神经网络实现手写字体识别
神经网络入门学习中,进行了手写字体识别实践,该篇博客用于记录实践代码,以备后续使用. 关键词:神经网络,前向传播.反向传播.梯度下降.权值更新.手写字体识别 1. 实践代码 import numpy ...
- 深度学习,实现手写字体识别(大数据人工智能公司)
手写字体识别是指给定一系列的手写字体图片以及对应的标签,构建模型进行学习,目标是对于一张新的手写字体图片能够自动识别出对应的文字或数字.通过深度学习构建普通神经网络和卷积神经网络,处理手写字体数据.通 ...
- AI基础:KNN与K近邻距离度量说明、利用KNN手写字体识别分类实践
KNN k近邻 文章目录 KNN算法 K近邻中近邻的距离度量 欧式距离 标准化欧式距离 曼哈顿距离 汉明距离 夹角余弦 杰卡德相似系数 皮尔逊系数 切比雪夫距离 闵可夫斯基距离 马氏距离 巴氏距离 各 ...
最新文章
- graphpad柱状图怎么加图例_如何用Graphpad prism添加多个图例
- kafka_2.11-0.10.2.1中的auto.offset.reset
- 阿里云技术白皮书_2019年云计算发展白皮书发布 阿里云保持优势成亚太最大云服务商...
- vue 引入qunee_Vue页面中js引入的问题
- 电话号码正则表达式 (包含电话号码 和 手机号码)
- 如何断开GitLab远程仓库链接
- 自定义----损失函数与优化器
- 浅谈今日头条关键词下拉词框优化推广的优势
- Centos6.5安装FastDFS
- 如何将360浏览器兼容IE8、IE7
- 据我所知目前就只飞秋表情库
- 微信html5 下拉刷新,微信小程序下拉刷新:onPullDownRefresh正确使用姿势
- JMeter做http接口功能测试
- C++ 学生信息管理系统课程设计报告
- HTML 学习总结2 框架 表单
- 【转载】【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结
- 《MATLAB专刊》——利用向量化编程提升MATLAB代码执行效率
- 新闻推荐--从DKN出发
- Python绘制某图片(LOL)
- iPhone系统可以降级吗?