写程序学ML:K近邻(KNN)算法原理及实现(二)

本文介绍了K近邻(KNN)算法,并通过三个实例——简单分类、约会网站用户分类和手写体识别——来验证其实现。在约会网站实例中,对用户数据进行归一化处理,手写体识别则涉及将图像数据转化为文本格式。KNN算法虽然简单有效,但可能面临数据存储和计算效率问题。
摘要由CSDN通过智能技术生成

[题外话]近期申请了一个微信公众号:平凡程式人生。有兴趣的朋友可以关注,那里将会涉及更多机器学习、OpenCL+OpenCV以及图像处理方面的文章。


2.2   简单实例

为了验证前面实现的K近邻算法正确性,先设计一个简单实例。

该实例中,在code中调用函数createDataSet()创建了样本数据group及分类 labels,具体实现如下:

def createDataSet():
	group = array([[1.1, 1.1], [1.0, 1.2], [0.2, 0.4], [0.9, 0.1]]) #创建4x2的数组作为训练样本
	labels = ['A', 'A', 'B', 'B'] #4个训练样本所属类的标记
	
	return group, labels

然后调用模块kNN的函数kNN.knnClassify()对应测试样本[0.2, 0]进行分类测试,其分类结果为B,符合预期。具体实现如下:

group, labels = createDataSet() #创建训练样本和对应标记
realIndex = kNN.knnClassify([0.2, 0], group, labels, 3) #检测测试样本[0.2, 0]属于哪个类
print realIndex

为了清楚地看到训练样本各个类别的分类情况,可以调用matplotlib绘制了样本数据的散列图。具体实现如下:

#Matplotlib 里的常用类的包含关系为 Figure -> Axes -> (Line2D, Text, etc.)
#一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。
fig = plt.figure() #创建图表fig
ax = fig.add_subplot(1, 1, 1) #在图表fig中创建一个子图ax
#绘制散列图,前两个参数表示x轴和y轴所要显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值