《机器学习实战》学习笔记:k-近邻算法的两个应用场景

本文通过《机器学习实战》中的实例介绍了k-近邻算法在约会网站数据分类和手写数字识别中的应用。详细讲述了数据收集、准备、算法设计和测试的过程,探讨了k值对分类准确率的影响,并指出k-近邻算法虽然简单有效,但存在计算复杂度和无法揭示数据内在含义的缺点。
摘要由CSDN通过智能技术生成

之前学习了k-近邻算法的实现后,参考《机器学习实战》中的例子进行了k-近邻算法的测验,主要测试了针对约会网站和手写识别系统的数据分类,这两个测试使用的是《机器学习实战》提供的数据集。

在编写函数前,需在.py文件中添加以下内容:

from numpy import *
import numpy as np
import operator
from os import listdir

第一部分是针对约会网站的数据分类,用于改进约会网站的配对效果。该实例的简介如下:

  • 海伦一直使用在线约会网站寻找合适自己的约会对象。尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的人。经过一番总结,她发现曾交往过三种类型的人:
    1.不喜欢的人( 以下简称1 );
    2.魅力一般的人( 以下简称2 );
    3.极具魅力的人( 以下简称3 )

  • 尽管发现了上述规律,但海伦依然无法将约会网站推荐的匹配对象归入恰当的分类。她觉得可以在周一到周五约会哪些魅力一般的人,而周末则更喜欢与那些极具魅力的人为伴。海伦希望我们的分类软件可以更好的帮助她将匹配对象划分到确切的分类中。此外海伦还收集了一些约会网站未曾记录的数据信息,她认为这些数据更有助于匹配对象的归类。

  • 这里提取一下这个案例的目标:根据一些数据信息,对指定人选进行分类(1或2或3)。为了使用kNN算法达到这个目标,我们需要哪些信息?前面提到过,就是需要样本数据,仔细阅读我们发现,这些样本数据就是“海伦还收集了一些约会网站未曾记录的数据信息 ”。

针对以上的描述,需要进行以下步骤:

  1. 收集数据

  2. 准备数据

  3. 设计算法分析数据

  4. 测试算法

1.收集数据

海伦收集的数据是记录一个人的三个特征:每年获得的飞行常客里程数;玩视频游戏所消耗的时间百分比;每周消费的冰淇淋公升数。数据是txt格式文件,如下图,前三列依次是三个特征,第四列是分类(1:代表不喜欢的人,2:代表魅力一般的人,3:代表极具魅力的人),每一行数据代表一个人。

这里写图片描述

2.准备数据

计算机需要对数据文件txt读取数据,因此需要把数据进行格式化,对于数学运算,计算机擅长把数据存放在矩阵中。以下代码中file2matrix(filename)函数完成了这一工作,该函数输入数据文件名(字符串),输出训练样本矩阵和类标签向量。

这一过程返回两个矩阵:一个矩阵用于存放每个人的三个特征数据,一个矩阵存放每个人对应的分类。

3.设计算法分析数据

k-近邻算法的思想是寻找测试数据的前k个距离最近的样本,然后根据这k个样本的分类来确定该数据的分类,遵循“多数占优”原则。因此,如何寻找样本成为主要的问题,在信号处理和模式识别领域中,常常使用“距离”来度量信号或特征的相似度。在这里,我们假定可以使用三个特征数据来代替每个人,比如第一个人的属性我们用[40920, 8.326976, 0.953952]来代替,并且他的分类是3。那么此时的距离就是点的距离。

求出测试样本与训练样本中每个点的距离,然后进行从小到大排序,前k位的就是k-近邻,然后看看这k位近邻中占得最多的分类是什么,也就获得了最终的答案。这一部分是k-近邻算法的核心,代码中classify()函数就实现了k-近邻算法的核心部分。

一个优化算法效果的步骤——归一化数据:

打开数据文件我们可用发现第一列代表的特征数值远远大于其他两项特征,这样在求距离的公式中就会占很大的比重,致使两个样本的距离很大程度上取决于这个特征,其他特征的特性变得可有可无,这显然有悖于实际情况。因此通常我们可用使用归一化这一数学工具对数据进行预处理,这一处理过后的各个特征既不影响相对大小又可以不失公平。Normalize(data)函数实现了这一功能。

4.测试算法

经过了对数据进行预处理后、归一化数值,可用验证kNN算法有效性,测试代码为:

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值