k-近邻算法(二)
来源:互联网 发布:软件开发安全管理规范 编辑:程序博客网 时间:2024/06/05 19:30
二 k-近邻算法实战之约会网站配对效果判定
上一小结学习了简单的k-近邻算法的实现方法,但是这并不是完整的k-近邻算法流程,k-近邻算法的一般流程:
收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据。一般来讲,数据放在txt文本文件中,按照一定的格式进行存储,便于解析及处理。
准备数据:使用Python解析、预处理数据。
分析数据:可以使用很多方法对数据进行分析,例如使用Matplotlib将数据可视化。
测试算法:计算错误率。
使用算法:错误率在可接受范围内,就可以运行k-近邻算法进行分类。 已经了解了k-近邻算法的一般流程,下面开始进入实战内容。
2.1 实战背景
海伦女士一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的人选,但她并不是喜欢每一个人。经过一番总结,她发现自己交往过的人可以进行如下分类:
不喜欢的人
魅力一般的人
极具魅力的人
海伦收集约会数据已经有了一段时间,她把这些数据存放在文本文件datingTestSet.txt中,每个样本数据占据一行,总共有1000行。
datingTestSet.txt数据下载
海伦收集的样本数据主要包含以下3种特征:
每年获得的飞行常客里程数
玩视频游戏所消耗时间百分比
每周消费的冰淇淋公升数
这里不得不吐槽一句,海伦是个小吃货啊,冰淇淋公斤数都影响自己择偶标准。打开txt文本文件,数据格式如图2.1所示
图2.1 datingTestSet.txt格式
2.2 准备数据:数据解析
在将上述特征数据输入到分类器前,必须将待处理的数据的格式改变为分类器可以接收的格式。分类器接收的数据是什么格式的?从上小结已经知道,要将数据分类两部分,即特征矩阵和对应的分类标签向量。在kNN_test02.py文件中创建名为file2matrix的函数,以此来处理输入格式问题。 将datingTestSet.txt放到与kNN_test02.py相同目录下,编写代码如下:
# -*- coding: UTF-8 -*-import numpy as np"""函数说明:打开并解析文件,对数据进行分类:1代表不喜欢,2代表魅力一般,3代表极具魅力Parameters: filename - 文件名Returns: returnMat - 特征矩阵 classLabelVector - 分类Label向量"""def file2matrix(filename): #打开文件 fr = open(filename) #读取文件所有内容 arrayOLines = fr.readlines() #得到文件行数 numberOfLines = len(arrayOLines) #返回的NumPy矩阵,解析完成的数据:numberOfLines行,3列 returnMat = np.zeros((numberOfLines,3)) #返回的分类标签向量 classLabelVector = [] #行的索引值 index = 0 for line in arrayOLines: #s.strip(rm),当rm空时,默认删除空白符(包括'\n','\r','\t',' ') line = line.strip() #使用s.split(str="",num=string,cout(str))将字符串根据'\t'分隔符进行切片。 listFromLine = line.split('\t') #将数据前三列提取出来,存放到returnMat的NumPy矩阵中,也就是特征矩阵 returnMat[index,:] = listFromLine[0:3] #根据文本中标记的喜欢的程度进行分类,1代表不喜欢,2代表魅力一般,3代表极具魅力 if listFromLine[-1] == 'didntLike': classLabelVector.append(1) elif listFromLine[-1] == 'smallDoses': classLabelVector.append(2) elif listFromLine[-1] == 'largeDoses': classLabelVector.append(3) index += 1 return returnMat, classLabelVector"""函数说明:main函数Parameters: 无Returns: 无Modify: 2017-03-24"""if __name__ == '__main__': #打开的文件名 filename = "datingTestSet.txt" #打开并处理数据 datingDataMat, datingLabels = file2matrix(filename) print(datingDataMat) print(datingLabels)
- k-近邻算法(二)
- K-近邻算法(二)
- K近邻算法(二)程序
- 二、K-近邻算法(kNN)
- 机器学习(二):分类算法之k-近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- K近邻算法
- k近邻算法
- OpenCv K近邻算法
- k-近邻算法(kNN)
- k-近邻算法
- k-近邻算法(kNN)
- K近邻算法
- K近邻分类算法
- $_POST 和php://input的区别
- POJ3624 Charm Bracelet
- tomcat免安装版本的常用配置
- POJ1218 THE DRUNK JAILER
- 洛谷p3378堆模板题
- k-近邻算法(二)
- Material Design控件之Toolbar
- STM8S_007_片内FLASH和EEPROM编程
- PyQt5学习教程13:输入对话框的使用
- HUD 2094 产生冠军
- 观察者模式简单实现
- 重磅!阿里云栖大会全部PPT+视频下载放送
- DrawerLayout,Toolbar,NavigationView实现侧滑的基本使用
- 2.1 key命令