在约会网站上使用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()
结果如下图所示
来源:CSDN
作者:curtain灬、
链接:https://blog.csdn.net/weixin_43570254/article/details/104427104