《机器学习实战》kNN学习笔记(二)

笑着哭i 提交于 2020-02-22 06:35:27

在约会网站上使用k-近邻算法

首先,把约会数据存放在文本文件datingTestSet中,样本主要包括以下三个特征

  • 每年获得的飞行常客里程数
  • 玩视频游戏所耗时间百分比
  • 每周消耗的冰激凌公升数

在kNN.py中创建名为file2matrix的函数,以此来处理输入格式问题。该函数的输入为文件名字符串,输出为训练样本矩阵和类标签向量

def file2matrix(filename):
    # 打开文件
    fr = open(filename)
    # 读取文件所有内容
    arrayOlines = fr.readlines()
    # 得到文件行数
    numberOfLines = len(arrayOlines)
    # 返回的NumPy矩阵numberOfLines行,3列
    returnMat = np.zeros((numberOfLines, 3))
    # 创建分类标签向量
    classLabelVector = []
    # 行的索引值
    index = 0
    # 读取每一行
    for line in arrayOlines:
        # 去掉每一行首尾的空白符,例如'\n','\r','\t',' '
        line = line.strip()
        # 将每一行内容根据'\t'符进行切片,本例中一共有4列
        listFromLine = line.split('\t')
        # 将数据的前3列进行提取保存在returnMat矩阵中,也就是特征矩阵
        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

在python命令提示符下输入下内容

>>> from numpy import *
>>> import kNN
>>> from importlib import reload
>>> reload(kNN)
<module 'kNN' from 'D:\\pythonworkspace\\Machine-Learning-in-Action-Python3-master\\kNN_Project1\\kNN.py'>
>>> datingDataMat,datingLabels = kNN.file2matrix('datingTestSet.txt')
>>> import matplotlib
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>>> ax.scatter(datingDataMat[:,1],datingDataMat[:,2])
<matplotlib.collections.PathCollection object at 0x000002B8A857A788>
>>> plt.show()

>>>

我们使用Matplotlib创建散点图
散点图使用大厅DataMat矩阵的第二第三列数据,分别表示特征值玩‘视频游戏所耗时间百分比’和’每周消耗的冰激凌公升数‘
如图所示
在这里插入图片描述
上图很难得到一些需要的数据信息,所以用色彩来标记不同的样本分类
Matplotlib库提供的scatter函数支持个性化标记散点图上的点。重新输入上面代码
调用scatter函数时使用下列参数

>>> ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15*array(datingLabels),15*array(datingLabels))
<matplotlib.collections.PathCollection object at 0x000002B8A857A788>
>>> plt.show()

结果如下图所示
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!