前言:
而今大家对“基于knn算法的手写数字识别过程”可能比较关怀,我们都需要知道一些“基于knn算法的手写数字识别过程”的相关内容。那么小编在网摘上收集了一些有关“基于knn算法的手写数字识别过程””的相关资讯,希望你们能喜欢,朋友们快快来了解一下吧!菜鸟独白
前段时间一直在写各种榜单,2017电影榜单,基金榜单,Github榜单上的库等等,玩的不亦乐乎!机器学习前面写了一篇(小白入门最简单的机器学习算法)偷懒没有继续写。其实学和玩是不矛盾的,个人对数据分析一直非常好奇,只是数据分析和数据挖掘是两个完全不同的维度,一个趋于表象,一个趋于内在,各有千秋,但是都很有趣。今天我接着来分享一篇好玩的机器学习例子,我们如何识别手写数字。
怎么玩呢:
了解这个5000多个手写数子
清洗数据并用机器学习算法训练
让机器来识别数字
超参数调整提高准确率
1.介绍一下这个数据集
这个数据集也是非常有名的,是入门的经典数据集,而且时间也蛮久的了!大概在1998年就有的这个数据集,大概情况如下:
一共有5620个数据
每一个数据有64个属性(特征)
这64个特征其实是一个8*8的像素点,每个像素点的取值在0-16之间
这数据集8*8 其实就是一个手写的数字,数字是0-9之间的任意一个数字
2.导入数据集
这个数据集已经直接内置在sklearn里面了,非常方便.它内置了很多好玩的数据集,对于刚开始学机器学习的同学来说,建议先从清洗过的数据集开始练手,然后慢慢的再用原始的复杂的数据集.
1).从sklearn导入数据
这个数据集和iris鸢尾花很类似,有data,target,target_names,image,DESCR五个属性.非常标准的一个数据集.
sklean里的数据仅收入了1797个数据,规模比5000小很多,仅有三分之一左右. 但是对于我们新手来说足够了.
2).看一下手写数字长啥样
有同学会问不是说都是手写数字吗,怎么都是一个一个矩阵啊,好我们就来看一下手写数字长啥样:
我们从数据集中选一个编号为111的数
第111个数其实是一个array,里面有64个数字,我们图像化一下:
我们人眼识别一看就知道是一个数字4,好我们看一下target里面的值是不是也是4:
y=digits.target
y[111]
>>4
target里面也是4,说明我人眼识别看的是对的
3.把数据喂给机器
这里我们依然采用knn(k邻近算法前面我详细介绍过)来训练这个数据集.
1).机器学习有一个套路,就是三板斧:
分割数据,划出训练数据,测试数据
找到算法模型,训练数据
测试模型准确率,然后调参
训练完数据之后我们的准确率有98.33%,还是蛮高的!
2).让机器来预测数据
比如我们从测试集里面随机抽一个数据,让机器去识别:
这是一个数字2,好我们用刚才的模型让机器去识别一下,看他能不能读出来
knn.predict(X_test[10])
>>
array([2])
牛逼啊,如果我们给这个算法套一个外壳,前端用摄像头读取数字,后台用这套算法去训练,然后用语音去播报数字,就是一个小小数字识别机器人啦!当然这个想法比较简陋~~
4.提高准确率
我们的knn这个算法有很多参数可以调,大家可以去 sklearn官网查一下
class sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=1, **kwargs)
上面都是默认参数,这里我们调整下面几个参数:
n_neighbors:邻近值我们搜索从1到10
weights:权重有两种"uniform,distance"
p:p值不通,代表不同的距离类型,比如p=1为曼哈顿距离,p=2为欧氏距离
其实对参数的调整,需要对这个算法有深入的认识,比如权重的选择什么时候应该用unifrom(统一选择法),什么时候用distance(距离选择法),二者之间的区别是什么,最后我们看一下搜索网格参数之后最佳系统参数是多少:
gird_search.best_params_
>>
{'n_neighbors': 1, 'weights': 'uniform'}
gird_search.best_score_
>>
0.98440979955456576
原来我们的准确率为98.3%,最后用网格搜索发现最佳的参数是k=1,weights='unifrom',调参数之后变成了98.44%,如果我们继续大范围的调整更多的相关参数,准确率有可能更高!当然如果样本越大的话,准备率也会提高!
结论:
机器学习对数学知识真的要求很高,越往深研究,越发现自己的数学知识很浅薄!同时机器学习也很可怕,因为一旦大量的数据喂个机器之后,机器进行学习,它就有了识别和预测的能力,可以说是一种武器或者是双刃剑,善加利用对我们的工作学习,帮忙非常大,因为它的速度真的太快了!
End.
运行人员:中国统计网小编
中国统计网,是国内最早的大数据学习网站
//
标签: #基于knn算法的手写数字识别过程