kNN算法中文名是k-近邻算法
他的工作原理是:存在一个训练数据集(样本数据集)这个数据集中每一份数据都有一个标签,我们知道训练数据集中的样本数据和他所属的类型。然后我们在输入新的没有标签的数据的时候我们可以根据算法得到新输入的数据的类型。
一般的我们选择前k个最相近的数据所以算法的名称叫 k-近邻算法。(k 一般是不大于20的整数)
k-近邻算法的一般流程
1) 收集数据
2)准备数据 :计算距离,结构化的数据格式有助于批量处理
3)分析数据
4)训练算法:k-近邻算法无需训练
5)测试算法:计算错误率
6)应用:
按照流程来做一下海伦约会
我将已整理好的结构化数据放在下方:
链接:https://pan.baidu.com/s/1hCiXvwfuSs1DsGDeek4j0w
提取码:vxd7
这两份数据都是整理好的差别是datingTestSet中 有字符串而第二份中是使用123代表三种状态我们更倾向使用第二份
这数据中分别是
每年飞行里程数,玩游戏所耗时间百分比 ,每周吃冰淇淋公升数,第四列中123分别代表不喜欢,很小的魅力,很大魅力
定义函数file2matrix()
def file2matrix(filename):
fr = open(filename)
arrayOLines = fr.readlines() #读取文件每一行 就是讲文件存储到矩阵中了
numberOfLines = len(arrayOLines) #得到文件的行数
returnMat = zeros((numberOfLines,3))#建立一个矩阵 矩阵是全零的行数是文件行数,列数是三列
classLabelVector = [] #建立一个空矩阵
index = 0 #一个临时变量=0
for line in arrayOLines: # 循环 每一行在整个文件的矩阵中过一遍那意思
line = line.strip() #每一行去掉头尾空白
listFromLine = line.split('\t')#制表
returnMat[index,:] = listFromLine[0:3]#前三列012给到returnMat[0,:][1,:]...
classLabelVector.append(int(listFromLine[-1]))#分类的标签向量挂上 取listFromLine最后一个
#数据集中最后一列代表着标签
index += 1 #参数增加1 这样能一行行矩阵写下来 对应着文件的每一行
return returnMat,classLabelVector#得到矩阵和标签 矩阵是前三列的数据做成相对应的矩阵
#标签是一行不停的往上挂