《机器学习实战》个人学习记录笔记(二)———k-近邻算法实战之约会网站配对效果判定

这篇博客详细记录了《机器学习实战》中k-近邻算法的学习过程,包括数据收集、准备、分析、测试和实际应用。通过UCI机器学习资料库获取数据,使用Python进行数据解析和预处理,借助Matplotlib进行数据可视化,以理解数据模式。通过数据归一化处理不同范围的特征值,并验证分类器的错误率,强调了k取奇数在投票中的重要性。
摘要由CSDN通过智能技术生成

第二章 k-近邻算法

PS:个人笔记 根据《机器学习实战》这本书,Jack-Cui的博客,以及深度眸的视频进行学习

k-近邻算法的一般流程

①收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据。一般来讲,数据放在txt文本文件中,按照一定的格式进行存储,便于解析及处理。
②准备数据:使用Python解析、预处理数据。
③分析数据:可以使用很多方法对数据进行分析,例如使用Matplotlib将数据可视化。
④测试算法:计算错误率。
⑤使用算法:错误率在可接受范围内,就可以运行k-近邻算法进行分类。

1.收集数据

⭐⭐⭐UCI机器学习资料库,非常重要的一个资料库



2 准备数据:数据解析

在将上述特征数据输入到分类器前,必须将待处理的数据的格式改变为分类器可以接收的格式。

import numpy as np

""" 
函数说明:打开并解析文件,对数据进行分类:1代表不喜欢,2代表魅力一般,3代表极具魅力 

Parameters: 
    filename - 文件名 
Returns: 
    returnMat - 特征矩阵 
    classLabelVector - 分类Label向量 
"""

def file2matrix(filename):                              # 函数作用就是打开并解析文件,对数据进行分类
    fr = open(filename)                                 # 打开文件,文件名filename
    arrayOLines = fr.readlines()                        # 读取文件所有内容,一行一行的读取
    numberOfLines = len(arrayOLines)                    # 得到文件行数;这里用的文本是1000行
    returnMat = np.zeros((numberOfLines, 3))            # 返回的NumPy矩阵,解析完成的数据:(1000,3)的0矩阵
    classLabelVector = []                               # 返回的分类标签向量,里面应该是0,1,2;后面进行处理
    index = 0                                           # 行的索引值
    for line in arrayOLines:
        line = line.strip()                             # s.strip(),删除空白符(包括'\n','\r','\t',' ')
        listFromLine = line.split('\t')                 # 使用s.split()将字符串根据'\t'分隔符进行切片。
        returnMat[index, :] = listFromLine[0:3]         # [0:3]=[0,1,2]将数据前三列提取出来,存放到returnMat的NumPy矩阵[0,:]中,也就是特征矩阵
        if listFromLine[-1] == 'didntLike':             # listFromLine一共是4列,最后一列是类别列
            classLabelVector.append(1)
        elif listFromLine[-1] == 'smallDoses':
            classLabelVector.append(2)
        elif listFromLine[-1] == 'largeDoses':
            classLabelVector.append(3)
        index += 1                                      # 就是一行一行的填入特征值,returnMat[index,:]是特征矩阵
    return returnMat, classLabelVector


""" 
Parameters: 
    无 
Returns: 
    无 

Modify: 
    2017-03-24 
"""
if __name__ == '__main__':                                  # main函数
    filename = "datingTestSet.txt"                          # 打开的文件名,放在一个文件夹下,就不用考虑路径了
    datingDataMat, datingLabels = file2matrix(filename)     # 打开并处理数据,用到上面写的数据处理函数
    print(datingDataMat)                                    # 返回特征矩阵和分类向量
    print(datingLabels)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值