《机器学习实战》第2章阅读笔记3 使用K近邻算法改进约会网站的配对效果—分步骤详细讲解1——数据准备:从文本文件中解析数据(附详细代码及注释)

 本篇使用的数据存放在文本文件datingTestSet2.txt中,每个样本数据占据一行,总共有1000行。

样本主要包含以下3中特征:

(1)每年获得飞行常客里程数

(2)玩视频游戏所耗时间百分比

(3)每周消费的冰淇淋公升数

在使用分类器之前,需要将处理的文件格式转换为分类器所接受的格式。


下边代码用来处理输入格式问题:该函数的输入为文件名字符串,输出为训练赝本矩阵和类标签向量。该函数可以作为格式处理函数,在具体例子中稍加改动即可。

代码里已经有详细的注释说明,如有不懂可以留言一起交流。

file2matrix.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from numpy import *
import operator
import matplotlib.pyplot as plt


def file2matrix(filename):
    """将文本记录转换为Numpy的解析程序"""
    fr = open(filename)
    array_lines = fr.readlines()  # 读取文件
    number_lines = len(array_lines)  # 获取文件行数
    return_mat = zeros((number_lines, 3))  # 创建返回的Numpy矩阵,大小为number_lines*3
    class_label_vector = []     # 类别标签列表
    index = 0
    for line in array_lines:
        line = line.strip()  # 截取掉所有的回车符
        list_from_line = line.split('\t')  # 使用tab字符\t将上一步得到的整行数据分割成一个元素列表
        return_mat[index, :] = list_from_line[0:3]  # 取前3个元素,将它们存储到特征矩阵中
        # 将列表的最后一列存储在类别便签列表内,必须明确表示存储的是整型,不然默认当成字符串处理
        class_label_vector.append(list_from_line[-1])   # 将列表的最后一列存储在类别便签列表内
        index += 1
    return return_mat, class_label_vector


# 创建一个读取数据实例,并输出数据
dating_data_mat, dating_labels = file2matrix('datingTestSet2.txt')
print("原始特征值为")
print(dating_data_mat)
print("前20个标签类别为")
print(dating_labels[:20])

运行结果为:

扫描二维码关注公众号,回复: 4506247 查看本文章

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/85001604
今日推荐