机器学习实战-手写数字识别

标签:
机器学习knn算法python |
分类: 人工智能和大数据 |
KNN算法原理
优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用数据范围:数值型和标称型。
KNN算法流程
电影名称
打斗镜头
接吻镜头
电影类型
California Man
3
104
爱情片
He's Not Really into Dudes
2
100
爱情片
Beautiful Woman
1
81
爱情片
Kevin Longblade
101
10
动作片
Robo Slayer 3000
99
5
动作片
Amped ll
98
2
动作片
?
18
90
未知
注:?是待分类的电影
已知电影与未知电影的距离
电影名称
与未知电影的距离
California
Man
20.5
He's Not Really into Dudes
18.7
Beautiful Woman
19.2
Kevin Longblade
115.3
Robo Slayer 3000
117.4
Amped ll
118.9
按照距离递增排序,可以找到K个距离最近的电影。假定k=4,则最靠近的电影是He's
Not Really into Dudes 、 Beautiful
Woman 、 California
Man、Kevin
Longblade ,其中有三个爱情片,一个动作片,少数服从多数,所以就把?分成了爱情片,一次完整的KNN算法流程已经走完了。
KNN算法进行手写数字的识别
运行环境:Python 2.7,OpenCV3.0.1
手写数字图片集合:我们采用opencv自带的这张2000*1000的图片进行手写数字的识别,里边共有5000个数字,每个数字占用20*20个像素,0-9这10个数字分别有500张,可以清楚看到每个数字都是占5行,其中一行有100个数字,我们准备用每个数字的5行的每一行的前50个作为训练数据(5*50=250),后50个作为测试(5*50=250)
Python代码:
(我截图的目的是为了界面的美观性,也为了让读者亲自把代码敲一遍,更好的去理解KNN)
http://s7/mw690/005NemkAzy77Qvxosrcf6&690
http://s7/mw690/005NemkAzy77QvxT65046&690
http://s9/mw690/005NemkAzy77QvyfQCc58&690
运行结果:
http://s7/mw690/005NemkAzy77QvxT65046&690
http://s9/mw690/005NemkAzy77QvyfQCc58&690
运行结果:
前一篇:图像匹配之欧式距离算法
后一篇:自然三次样条曲线Java实现