KNN实现约会网站预测
- 样本包含3种特征:
每年获得的飞行常客里程数
玩视频游戏所耗时间百分比
每周消费的冰淇淋公升数 - 数据存放在文本文件中
程序包含以下部分
-
从文本文件中解析数据
-
分析数据:使用Matplotlib创建散点图
-
准备数据:归一化数值
对于新输入的数值,用训练样本的特征值范围对新数据进行归一化 -
测试算法
通常选取已有数据的10%作为测试集,检测分类器的正确率
选择错误率来检测分类器性能 -
构建完整的约会网站预测函数
import numpy as np
import operator
from matplotlib import pyplot as plt
def file2matrix(filename):
"""读取文件
原文件为txt文本格式
returnMat表示训练样本的特征矩阵
classLabelVector表示每个训练样本的分类结果
"""
fr=open(filename)
arrayOLines=fr.readlines() #readlines方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素
#arrayOLines=['40920\t8.326976\t0.953952\t3\n', '14488\t7.153469\t1.673904\t2\n',....
numberOfLines=len(arrayOLines) #得到文件行数
returnMat=np.zeros((numberOfLines,3))
classLabelVector=[]
index=0
for line in arrayOLines:
#循环一进来的line=40920 8.326976 0.953952 3
line=line.strip() #截取掉所有的回车字符\n,得到整行数据,最后一个数据隐藏着转义字符\n
#line=40920 8.326976 0.953952 3
listFromLine=line.split('\t') #分割成一个元素列表,\t表示水平制表(HT) (跳到下一个TAB位置)
#listFromLine=['40920', '8.326976', '0.953952', '3']
returnMat[index,:]=listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1</