在学习了上一节简单的k-近邻算法实现后,这一篇文章讲一下书中给出的一个例子,在约会网站上使用k-近邻算法:
1)收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据。一般来讲,数据放在txt文本文件中,按照一定的格式进行存储,便于解析及处理。
2)准备数据:使用Python解析、预处理数据。
3)分析数据:可以使用很多方法对数据进行分析,例如使用Matplotlib将数据可视化。
4)测试算法:计算错误率。
5)使用算法:错误率在可接受范围内,就可以运行k-近邻算法进行分类。
直接用了一个博主给的数据:
数据下载
海伦收集的样本数据主要包含以下3种特征:
def file2matrix(filename):fr = open(filename)# 读取文件所有内容arrayOLines = fr.readlines()# 得到文件行数numberOfLines = len(arrayOLines)# 返回的NumPy矩阵,解析完成的数据:numberOfLines行,3列returnMat = zeros((numberOfLines, 3))classLabelVector = []# 行的索引值index = 0for 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 += 1return returnMat, classLabelVector
上面代码主要作用是从txt文件中一行一行的提取出数据到数组中,首先用line.strip()截取掉所有的回车字符,然后使用tab字符“t”将上一步得到的整行数据分割成一个元素列表。
然后测试:
if __name__ == '__main__':#打开的文件名filename = ""#打开并处理数据datingDataMat, datingLabels = file2matrix(filename)print(datingDataMat)print(datingLabels)
数据解析结果类似:
本文发布于:2024-02-05 05:22:02,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170725102363400.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |