机器学习实战笔记2:使用K-近邻算法改进约会网站的配对效果

本文介绍如何运用机器学习中的K-近邻算法改进约会网站的配对效果,包括数据收集、预处理、可视化、归一化、算法验证和实际应用。通过从文本文件解析数据,使用Matplotlib进行数据可视化,对特征进行归一化处理,确保算法的公平性,最终实现一个完整的预测系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 背景

在学习了上一节简单的k-近邻算法实现后,这一篇文章讲一下书中给出的一个例子,在约会网站上使用k-近邻算法:
1)收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据。一般来讲,数据放在txt文本文件中,按照一定的格式进行存储,便于解析及处理。
2)准备数据:使用Python解析、预处理数据。
3)分析数据:可以使用很多方法对数据进行分析,例如使用Matplotlib将数据可视化。
4)测试算法:计算错误率。
5)使用算法:错误率在可接受范围内,就可以运行k-近邻算法进行分类。

二 准备数据:从文本文件中解析数据

直接用了一个博主给的数据:
datingTestSet.txt数据下载

海伦收集的样本数据主要包含以下3种特征:

  • 每年获得的飞行常客里程数
  • 玩视频游戏所消耗时间百分比
  • 每周消费的冰淇淋公升数
    在第一节代码基础上创建名为file2matrix的函数:
def file2matrix(filename):
    fr = open(filename)
    # 读取文件所有内容
    arrayOLines = fr.readlines()
    # 得到文件行数
    numberOfLines = len(arrayOLines)
    # 返回的NumPy矩阵,解析完成的数据:numberOfLines行,3列
    returnMat = zeros((numberOfLines, 3))
    classLabelVector = []
    # 行的索引值
    index = 0
    for line in arrayOLines:
        # s.strip(rm),当rm空时,默认删除空白符
        line = line.strip()
        # 使用s.split(str="",num=string,cout(str))将字符串根据'\t',tab字符分隔符进行切片。
        listFromLine = line.split('\t')
        # 将数据前三列提取出来,存放到returnMat的NumPy矩阵中,也就是特征矩阵
        returnMat[index, :] = listFromLine[0:3]
        # 根据文本中标记的喜欢的程度进行分类,1代表不喜欢,2代表魅力一般,3代表极具魅力
        if listFromLine[-1] == 'didntLike':
            classLabelVector.append(1)
        elif listFromLine[-1] == 'smallDoses':
            classLabelVector.append(2)
        elif listFromLine[-1] == 'largeDoses':
            classLabelVector.append(3)
        index += 1
    return returnMat, classLabelVector

上面代码主要作用是从txt文件中一行一行的提取出数据到数组中,首先用line.strip()截取掉所有的回车字符,然后使用tab字符“\t”将上一步得到的整行数据分割成一个元素列表。
然后测试:

if __name__ == '__main__':
    #打开的文件名
    filename = "datingTestSet.txt"
    #打开并处理数据
    datingDataMat, datingLabels = file2matrix(filename)
    print(datingDataMat)
    print(datingLabels)

数据解析结果类似:
这里写图片描述

三 使用Matplotlib让数据可视化

这里书上给的代码不多,参考了一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值