机器学习实战:在某约会网站上使用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

 

posted @ 2020-03-03 19:17  _Cheung  阅读(213)  评论(0编辑  收藏  举报