第二章 k-近邻算法
PS:个人笔记 根据《机器学习实战》这本书,Jack-Cui的博客,以及深度眸的视频进行学习
k-近邻算法的一般流程
①收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据。一般来讲,数据放在txt文本文件中,按照一定的格式进行存储,便于解析及处理。
②准备数据:使用Python解析、预处理数据。
③分析数据:可以使用很多方法对数据进行分析,例如使用Matplotlib将数据可视化。
④测试算法:计算错误率。
⑤使用算法:错误率在可接受范围内,就可以运行k-近邻算法进行分类。
1.收集数据
⭐⭐⭐UCI机器学习资料库,非常重要的一个资料库
2 准备数据:数据解析
在将上述特征数据输入到分类器前,必须将待处理的数据的格式改变为分类器可以接收的格式。
import numpy as np
"""
函数说明:打开并解析文件,对数据进行分类:1代表不喜欢,2代表魅力一般,3代表极具魅力
Parameters:
filename - 文件名
Returns:
returnMat - 特征矩阵
classLabelVector - 分类Label向量
"""
def file2matrix(filename): # 函数作用就是打开并解析文件,对数据进行分类
fr = open(filename) # 打开文件,文件名filename
arrayOLines = fr.readlines() # 读取文件所有内容,一行一行的读取
numberOfLines = len(arrayOLines) # 得到文件行数;这里用的文本是1000行
returnMat = np.zeros((numberOfLines, 3)) # 返回的NumPy矩阵,解析完成的数据:(1000,3)的0矩阵
classLabelVector = [] # 返回的分类标签向量,里面应该是0,1,2;后面进行处理
index = 0 # 行的索引值
for line in arrayOLines:
line = line.strip() # s.strip(),删除空白符(包括'\n','\r','\t',' ')
listFromLine = line.split('\t') # 使用s.split()将字符串根据'\t'分隔符进行切片。
returnMat[index, :] = listFromLine[0:3] # [0:3]=[0,1,2]将数据前三列提取出来,存放到returnMat的NumPy矩阵[0,:]中,也就是特征矩阵
if listFromLine[-1] == 'didntLike': # listFromLine一共是4列,最后一列是类别列
classLabelVector.append(1)
elif listFromLine[-1] == 'smallDoses':
classLabelVector.append(2)
elif listFromLine[-1] == 'largeDoses':
classLabelVector.append(3)
index += 1 # 就是一行一行的填入特征值,returnMat[index,:]是特征矩阵
return returnMat, classLabelVector
"""
Parameters:
无
Returns:
无
Modify:
2017-03-24
"""
if __name__ == '__main__': # main函数
filename = "datingTestSet.txt" # 打开的文件名,放在一个文件夹下,就不用考虑路径了
datingDataMat, datingLabels = file2matrix(filename) # 打开并处理数据,用到上面写的数据处理函数
print(datingDataMat) # 返回特征矩阵和分类向量
print(datingLabels)