机器学习实战:在某约会网站上使用k-近邻算法
一、步骤
1.收集数据:提供数据的文本文件
2.准备数据:使用python解析文本文件
3.分析数据:使用matplotlib画二维扩散图
4.测试算法
5.使用算法
二、准备数据:从文本中解析数据
创建一个函数用来处理输入的格式问题
用到的小知识点有:
1.zeros()函数
在给数组赋初始值的时候,经常会用到0数组,而Python中,我们使用zeros()函数来实现。在默认的情况下,zeros创建的数组元素类型是浮点型的,如果要使用其他类型,可以设置dtype参数进行声明。
2.strip()函数
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
str2 = " cnblog " print(str2.strip()) # 去除首尾空格
3.split()函数
str.split(str=" ", num=string.count(str)).
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -- 分割次数。默认为 -1, 即分隔所有。
str = "Line1-abcdef \nLine2-abc \nLine4-abcd"; print str.split( ); # 以空格为分隔符,包含 \n print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
输出为:
['Line1-abcdef', 'Line2-abc', 'Line4-abcd'] ['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
最后的代码为:
# 处理输入数据的格式问题 def file2matrix(filename): with open(filename) as fr: arrayOLines = fr.readlines() # 得到文件行数 print(arrayOLines) numberOfLines = len(arrayOLines) returnMat = zeros((numberOfLines, 3)) # 创建一个*行3列的0矩阵 classLabelVector = [] # index = 0 for line in arrayOLines: line = line.strip() # 去除首尾空格 listFromLine = line.split('\t') # 去除所有回车字符 returnMat[index, :] = listFromLine[0:3] # 选取列表的前三个元素分别赋给矩阵的第index行的1,2,3列 classLabelVector.append(int(listFromLine[-1])) # 将列表的最后一个字符变为整型添加到新列表中 index += 1 return returnMat, classLabelVector