【机器学习实战02】使用k-近邻算法改进约会网站的配对效果

news/2024/5/19 7:59:38/文章来源:https://blog.csdn.net/kevinelstri/article/details/52211211

程序流程:

1.收集数据:提供文本文件

2.准备数据:使用Python解析文本文件

3.分析数据:使用Matplotlib画二维扩散图

4.测试算法:使用提供的部分数据作为测试样本。

测试样本和非测试样本的区别在于:测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误

5.使用算法:产生简单的命令行程序,然后可以输入一些特征数据以判断结果


本样本共有三种特征:

每年获得的飞行常客里程数:The mile of flying every year

玩视频游戏所耗时间百分比:The time of play game or watch video

每周消费的冰淇淋公升数:The liter of ice-cream every week


代码:

#!/usr/local/env python
#-*- coding: utf-8 -*-from numpy import * #导入科学计算包numpy模块
import operator  #导入运算符模块
import matplotlib.pyplot as plt #k-近邻分类算法
def classify0(inX, dataSet, labels, k): #4个输入参数分别为:用于分类的输入向量inX,输入的训练样本集dataSet,标签向量labels,选择最近邻居的数目k#计算距离dataSetSize=dataSet.shape[0]  #获取数据集的宽diffMat=tile(inX, (dataSetSize, 1))-dataSet #使用欧式距离度量,故将输入向量和数据集中各向量相减sqDiffMat=diffMat**2  #平方sqDistances=sqDiffMat.sum(axis=1)  #计算输入向量和数据集中各向量之间的差的平方和distances=sqDistances**0.5  #计算欧式距离#选择距离最小的k个点 计算所属类别的出现频率sortedDistIndicies=distances.argsort() #取得输入向量和数据集中各向量欧式距离的从小到大排序的下标值classCount={}  #定义一个空字典for i in range(k):  #取计算欧氏距离排序后最小的前k个值voteIlabel=labels[sortedDistIndicies[i]]classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#排序 选择前k个点中出现最多的那一个类sortedClassCount=sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]#将文本记录转换为Numpy的array
def file2matrix(filename): #输入为文件名字符串fr=open(filename) #打开文件arrayOLines=fr.readlines() #取得该文件的每行数据的列表numberOfLines=len(arrayOLines) #计算该文件共有多少行(即共有多少个样本)returnMat=zeros((numberOfLines, 3)) #创建返回的Numpy矩阵classLabelVector=[]index=0for line in arrayOLines: #解析文件数据到列表line=line.strip() #去掉首尾空白符listFromLine=line.split('\t') #利用空格符分离字符串returnMat[index, :]=listFromLine[0:3] #将每行样本数据的前3个数据输入返回样本矩阵中classLabelVector.append(int(listFromLine[-1]))  #将每行样本数据的最后一个数据加入类标签向量中index+=1 return returnMat, classLabelVector #返回训练样本矩阵和类标签向量#分析数据-数据可视化 
def showDateSet(datingDataMat, datingLabels):    fig = plt.figure()  ax = fig.add_subplot(111)  ax.scatter(datingDataMat[:,0], datingDataMat[:,1], c = 15*array(datingLabels), s = 15*array(datingLabels), label=u'散点图')  plt.legend(loc = 'upper left')  plt.xlabel(u"The time of play game or watch video")  plt.ylabel(u"The mile of flying every year")  plt.show() #归一化特征值
def autoNorm(dataSet): #输入为数据集数据minVals=dataSet.min(0) #获得数据集中每列的最小值maxVals=dataSet.max(0) #获得数据集中每列的最大值ranges=maxVals-minVals #获取取值范围normDataSet=zeros(shape(dataSet)) #初始化归一化数据集m=dataSet.shape[0] #行normDataSet=dataSet-tile(minVals, (m, 1))normDataSet=normDataSet/tile(ranges, (m, 1)) #特征值相除return normDataSet, ranges, minVals #返回归一化矩阵,取值范围以及最小值#测试程序
def datingClassTest():hoRatio=0.10 #取测试样本占数据集样本的10%datingDataMat,datingLabels=file2matrix('datingTestSet2.txt') #得到样本集,样本标签normMat,ranges,minVals=autoNorm(datingDataMat) #得到归一化样本集,取值范围以及最小值m=normMat.shape[0] #样本集行数numTestVecs=int(m*hoRatio) #测试样本集数量 errorCount=0.0 #初始化错误率for i in range(numTestVecs): #循环,计算测试样本集错误数量classifierResult=classify0(normMat[i,:], normMat[numTestVecs:m,:], datingLabels[numTestVecs:m], 3) #k-近邻算法print "the classifier came back with: %d, the real answer is: %d"%(classifierResult, datingLabels[i]) if (classifierResult != datingLabels[i]):errorCount+=1.0 print "the total error rate is: %f"%(errorCount/float(numTestVecs)) #计算错误率,并输出#自定义分类器:输入信息并得出结果
def classifyPerson():resultList=['not at all', 'in small doses', 'in large doses']percentTats=float(10)ffMiles=float(100)iceCream=float(2.5)# percentTats=float(raw_input("percentage of time spent playing video games?"))  #函数raw_input()允许用户输入文本行命令并返回用户输入的命令# ffMiles=float(raw_input("frequent filer miles earned per year?"))  # iceCream=float(raw_input("liters of icecream consumed per year?"))datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')normMat,ranges,minVals=autoNorm(datingDataMat)inArr=array([ffMiles, percentTats, iceCream])classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3)print "You will probably like this person: ",resultList[classifierResult-1]#结果showDateSet(datingDataMat, datingLabels)#绘图classifyPerson()

运行结果:
You will probably like this person: in small doses

这里写图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_768648.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建网站必不可少的知识4

网站备案网站备案比域名备案麻烦很多,时间也比较长,企业备案15天左右,个人20天左右,时间只是大约时间,具体通过日期还得看交管局的审核速度。在审核期间我们的网站最好是无法解析也就是关闭网站不能访问,这…

网站常见问题1分钟定位 - 如何使用阿里云ARMS轻松重现用户浏览器问题

客户投诉不断,本地却无法重现? 页面加载较慢是用户经常会反馈的问题,也是前端非常关注的问题之一。但定位、排查解决这类问题就通常会花费非常多的时间,主要原因如下: 页面是在用户端的浏览器上加载执行,复…

太赞了!京东研发一哥力荐的高可用网站构建技术PDF,备好水,慢慢啃

随着用户规模的增长,网站架构问题的难度也在成倍增加。构建一个京东规模的亿级流量网站和构建一个中小型网站的技术架构难度截然不同。 在具体的架构实践中,所需要考虑的问题也远比中小型网站多得多。开涛根据在京东网站架构工作期间的实战经验写成此书…

【转】6个超酷的网站,专门用于学习算法

来自:程序员书库(ID:CodingBook) 书单来自:https://levelup.gitconnected.com/6-super-cool-websites-for-practicing-algorithms-learning-programming-4cda65a64b7e 最近一位有着15年经验的老程序员和我们他认为最…

可以免费自学编程的12个网站

很多人包括一些企业家,和市场营销人员都认为学习编程对一个人走向成功十分有帮助。在过去的一年里,我一直在学习编程。它有助我成为一个更好的创业者,我甚至可以提供一些帮助,当我的团队需要解决一些bug的时候。 现在&#xff0c…

这些电影网站凭什么得到知乎50万人推荐?真是令人相见恨晚!

近几年随着国产电影的崛起,今年的一部科幻电影火的沸沸扬扬,平时我们看电影,有很多都是收费的,也有的需要会员才能看,不过这一切都已经不算什么了,下面我就来给大家分享4个免费看电影的网站。 一、神马影院…

全球20个程序员免费学习的网站,年薪百万的第一步!

神奇的网站有很多,今天推荐20个和学习有关的,而且都是免费的,希望对大家有所帮助。 1、Ruby regular expression editor 正则表达式编辑器,rubular.com 正则表达式太复杂了总也写不对?Rubular是一个Ruby-based的正则 表达式在…

个人博客一|抓取崔庆才个人博客网站前端源码

1、准备 工具:仿站小工具V9.0 工具获取方式一: 关注微信公众号 微信公众号『stormsha』,后台回复『仿站工具』获取工具 工具获取方式二: 仿站小工具官网 https://smalltool.github.io/崔庆才博客 https://cuiqingcai.com/从网站源…

PageAdmin Cms建站系统教程之栏目的添加和管理

PageAdmin建站系统作为国内用户最多的企业级网站建设系统,功能强大,扩展灵活,在国内拥有庞大的用户群体,系统可以免费下载使用,被众多个人站长和网站制作公司用于网站建设和二次开发,上一篇小编讲解了PageA…

全球银行网站成黑客主攻目标 阿里云提供安全防御应急方案

近日,阿里云监控发现,匿名者(Anonymous)组织成员正在发起针对全球中央银行网站的攻击行动,截止目前,国内有超过2家以上的重要网站被攻击,攻击特征主要为DDoS攻击和CC攻击。 此次事件中&#xff…

如何实现分享网站文章到微信朋友圈时显示指定缩略图或LOGO

当下朋友圈很火,很多企业都将微信朋友圈作为品牌传播的途径,经常会发一些精彩的文章到微信朋友圈供大家自发传播,这样的想法很好,对于优质的内容,网友们也乐于转发与朋友们分享,对品牌宣传与推广确实是有好…

nginx实现https网站设置(SSL证书生成配置)

部分内容转载自:https://www.cnblogs.com/jingxiaoniu/p/6745254.html一、HTTPS简介1.https简介HTTPS其实是有两部分组成:HTTP SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密&#x…

如何快速搭建个人网站

一般来说,搭建网站,首先需要借助一个云平台,具有存储库的功能,上面的东西发布后,能够被网络上所有人访问到,当然这云平台是有自己的一套机制进行后台的设定与运作的,我们只是在基础上使用&#…

利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变

查看本章节 查看作业目录 需求说明: 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变当用户单击“”按钮时,文本框中的商品数量增加 1,单项…

利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动

查看本章节 查看作业目录 需求说明: 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动 实现思路: 在…

快看!❤️又一超实用浏览器插件!常用网站自动整合,JSON格式化,CSDN全站去广告!多种工具一键调用。开发者的福音!

其实这个插件才出来的时候博主也下载了使用过,并没有什么亮点,那时候甚至觉得有点多余,因为CSDN全站去广告啥的,早就安装了油猴脚本,广告?不存在的嘿嘿。。 就在前几天看见CSDN的活动在推荐这款插件&#x…

outlook搜索栏跑到上面去了_学习网站seo优化技巧,先了解搜索引擎搜索原理-行业动态...

泰州网站建设好之后,首先就要对网站进行SEO优化。那搜索引擎优化的主要任务之一,就是确定网站的搜索引擎友好性,因而,网站优化的每个环节都与搜索引擎存在必定的联络,研讨搜索引擎优化实际上是对搜索引擎作业进程的逆向…

报错:清除网站内搜索框中的历史记录?

问题:我在搜索框内点击一下后,就会出现一些搜索记录,可有些关键词我并没有在该网站搜索过,而是与这个网站无关的一些关键词。而且不同的网站上似乎关键词有重叠。如下图所示,请问应该怎么清除这些历史记录呢&#xff1…

简单网页设计作品代码_10个国外网站精选作品颠覆你对网页排版设计的认知

网站首页排版设计可以作为一个网站基础风格设计定调的页面之一。网站内页的各种版式、样式的演变都需要遵循首页的基本格调,包含布局的比例、配色、图标的风格、字体的样式及规范、页头页尾的公用组件等等。也许因为有了这些规范规定,很多新入行设计师以…

vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)...

二:下面是 通过 新建项目 来创建 ASP.NET web 应用程序 下面我们创建 数据库DAL层 和 实体类层 Model 他会自动生成 DAL 文件夹 我们继续 Model 层。方法同上,就不上图了。 然后我们来添加一个 工具类库 。这个工具类库,不是现在创建的&am…