本篇使用的数据存放在文本文件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 查看本文章