Python3:《机器学习笔记与实战》之Knn算法(2)识别手写数字
转载请注明作者和出处:https://blog.csdn.net/weixin_41858342/article/details
代码及数据地址:https://github.com/yuankaihua668/knn-code-and-data.git
操作系统:WINDOWS 10
软件版本:python-3.6.2-amd64
编 者:一个从大山到原野的孩子
---------------------
在上一章中,我们对Knn算法的基本原理、应用场景、优缺点等做了简要总结。通过我们约会吧的算法实战,相信,大家对K近邻算法有了更深入的掌握。其实作为一个小白的我来说,同样也认为Knn是所有算法中最简单也比较实用的算法。本节,我们将用手写识别数字的实例,再深入总结Knn算法的实现框架和代码。
上一章中,我们谈到小野转入了正式的小学,开始了他的学习生涯。同学们可能在想,作者不是写代码总结算法吗?怎么写起了这些平淡的学习生活。是的,其实生活总是要归于平淡,在平淡的生活中,只要你细细回味,总能体会到人生旅途中你所经历的那些感动、真诚、奋斗、委屈、无助和孤独。但到最后,你会发现,人生就是一次旅行,无论平穷与富贵,我们所能做的无非是不忘初心,每天认真生活,不负好时光。
我们新的小学是一个近似平行四边形的布局,两面环水,东北两面环山,正中是一个约200平的小操场,靠近西面有一个摇摇欲坠的篮球架,周围有高大的柳树。靠东面有个一米高的舞台背靠田地,儿时几个小伙伴围在一起在上面抓石子(总共5颗石子,一个人算一队,也可多个人算一队,从1、2,1开始抓;其中1颗是抓之前要捡开的,抓的途中 石子落地算输,抓完后,用手背背石子,背的过程是从手心到手背再到手心。背的过程中,石子落地算输。可以约定背到多少石子算赢。比如30颗。谁先到30谁赢)的场景还历历在目。西边背靠小河,是一个长8米左右,高3米多的白色矮小的瓦房,那是我们1年级老师带着孩子们玩的地方,偶尔也会拿一间屋子放一个乒乓球台,即使在下课10分钟的时间里,6年级最有权威的同学也会拿着全校仅有的一副乒乓球牌在这打上一局,其他同学要玩就要排队,遗憾的是,排队往往从第一节课开始排到放学还没排到,为了缓解矛盾,校长就会规定一个年级用一天。
靠北的是一排有近百年历史的老的木架、木板加竹篱笆的古老房子,房瓦盖的是全镇我只在此处见过的长长的琉璃瓦,房角和房顶的瓦片还有各种鸟兽的刻图造型,从西向东延伸,越来越矮,到最东边长约15米,最矮处有两间土墙瓦屋,一间用来给附近同学蒸午饭,还开了个一米左右的小窗,方便取饭;另一间是老师们住校的地方。南面是一排白色规整的砖墙房背靠仁河,上面有同学们用各色粉笔画的小图案,和一些孩童般天真的文字,墙面原本都是干净整洁的,但到我们读书的年代,他已经历了多年的风霜,日晒雨露,如季末的花一般即刻凋零,奄奄一息。除了这些图和文字,2米以下的墙面,白色石灰装饰过的墙面已到处脱落,脱落的遍体鳞伤,有的地方快要穿孔。我所在的教室就是南面一排的最东边的那一间。小野的6年小学生涯就是在这里度过的。关于在这,所经历的印象深刻的童年趣事。将在下一章更新。先上代码……
所有代码可以在此复制也可前往我的github地址下载代码和测试数据。所有代码都是可以改文件路径后,直接运行的。其中我加了理解的注释,涉及到numpy 数组 矩阵的高级用法 还是很值得一学的。
# -*- coding: utf-8 -*-
# @Date : 2019-01-18 16:30
# @Author : 一个从大山到原野的孩子
# @完成时间:
#项目根据已有的0-9的数据,识别手写数据。
from numpy import *
import operator
from os import listdir
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from os import listdir
"""
kNN: k Nearest Neighbors
Input: inX: vector to compare to existing dataset (1xN)
dataSet: size m data set of known vectors (NxM)
labels: data set labels (1xM vector)
k: number of