使用k-近邻算法改进约会网站的配对效果

news/2024/5/9 23:18:58/文章来源:https://blog.csdn.net/weixin_33697898/article/details/93745793

2.2  使用k-近邻算法改进约会网站的配对效果

  Helen交往过三种类型的人:

    不喜欢的人

    魅力一般的人

    极具魅力的人

 

  示例:在约会网站上使用k-近邻算法

    (1)收集数据:提供文本文件; datingTestSet2.txt链接  https://files.cnblogs.com/files/Lamfai/datingTestSet2.rar

    (2)准备数据:使用Python解析文本文件;

    (3)分析数据:使用Matplotlib画二维扩散图;

    (4)训练算法:此步骤不适用于k-近邻算法;

    (5)测试算法:使用Helen提供的部分数据作为测试样本,测试样本和非测试样本的区别在于:测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误;

    (6)使用算法:产生简单的命令行程序,然后Helen可以输入一些特征数据判断对方是否为自己喜欢的类型。

  2.1.1 准备数据:从文本文件中解析数据

    Helen把约会数据收集存放在文本文件datingTestSet2.txt中,每个样本数据占据一行,总共有1000行。Helen的样本主要包含以下3中特征:

      每年获得的飞行常客里程数

      玩视频游戏所耗时间百分比

      每周消费的冰淇淋公斤数

    在将上述特征数据输入到分类器之前,必须将待处理数据的格式改变为分类器可以接受的格式。在kNN.py中创建名为file2matrix的函数,以此来处理输入格式问题。该函数的输入为文件名字符串,输出为训练样本矩阵和类标签向量。

    将下面的代码增加到kNN.py中:

def file2matrix(filename):fr = open(filename)# 得到文件行数numberOfLines = len(fr.readlines())# 创建返回的NumPy矩阵returnMat = zeros((numberOfLines,3))# 解析文件数据到列表classLabelVector = []fr = open(filename)index = 0for line in fr.readlines():line = line.strip()listFromLine = line.split('\t')returnMat[index,:] = listFromLine[0:3]classLabelVector.append(int(listFromLine[-1]))index += 1return returnMat,classLabelVector

 

    Python处理文本文件非常容易。

    首先,我们需要知道文本文件包含多少行。打开文件,得到文件的行数。

    然后创建以零填充的矩阵NumPy,为了简化处理,我们将该矩阵的另一维度设置为固定值3,你可以按照自己的实际需求增加相应的代码以适应变化的输入值。

    循环处理文件中的每行数据,首先使用line.strip()截取掉所有的回车字符,然后使用tab字符\t将上一步得到的整行数据分割成一个元素列表。接着我们选取前3个元素,将它们存储到特征矩阵中。Python语言可以使用索引值-1表示列表中的最后一列元素,利用这种负索引,我们可以很方便地将列表的最后一列存储到向量classLabelVector中。我们必须明确地通知解析器,告诉它列表中存储的元素值为整型,否则Python语言将这些元素当作字符串处理。以前我们必须自己处理这些变量值类型问题,现在这些细节问题完全可以交给NumPy函数库来处理。

    在Terminal中输入以下命令: 

from imp import reload
reload(kNN) datingDataMat,datingLabels
= kNN.file2matrix('datingTestSet2.txt')

    使用函数file2matrix读取文件数据,必须确保文件datingTestSet2.txt存储在我们的工作目录中。

    输入:

datingDataMat

    输出:

  

    

    NumPy数组和Python数组:可以在Python命令行环境中输入from numpy import array将其导入。

  2.2.2 分析数据:使用Matplotlib创建散点图

    首先,使用Matplotlib制作原始数据的散点图,在Terminal中输入以下命令:  

import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])
plt.show()

    输出效果:

  

    散点图使用datingDataMat矩阵的第二、第三列数据,分别表示特征值“玩视频游戏所耗时间百分比”和“每周所消费的冰淇淋公升数”。但是没有使用样本分类的特征值,我们很难从上图中看到任何有用的数据模式信息。一般来说,我们会采用色彩或其他的记号来标记不同样本分类,以便更好地理解数据信息。Matplotlib库提供的scatter函数支持个性化标记散点图上的点。输入以下的代码:   

import kNN
from numpy import array
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
datingDataMat,datingLabels = kNN.file2matrix('datingTestSet2.txt')
ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels))
plt.show()

    上述代码利用了变量datingLabels存储的类标签属性,在散点图上绘制了色彩不等、尺寸不同的点。你可以看到一个与上图类似的散点图。在上图中,我们很难看到任何有用的信息,然而由于下图利用颜色及尺寸标识了数据点的属性类别,因此我们基本上可以从下图看到数据点所属三个样本分类的区域轮廓。

   

    上图是带有样本分类标签的约会数据散点图。虽然能够比较容易地区分数据点从属类别,但依然很难根据这张图得到结论性信息。

  2.2.3 准备数据:归一化数据

  

    上表给出了提取的四组数据,如果想要计算样本3和样本4之间的距离,可以使用下面的办法:

  

    可以很容易发现上面方程中数字差值最大的属性对结算结果的影响最大,也就是说,每年获取的飞行常客里程数对于计算结果的影响将远远大于上表其他两个特征——玩视频游戏的和每周消费冰淇淋公升数的影响,而产生这种现象的唯一原因,仅仅是因为飞行常客里程数远大于其他特征值。

    在处理这种不同的取值范围的特征值时,我们通常采用的方法时将数值归一化,如取值范围处理为0到1或者-1到1之间。

    下面的公式可以将任意范围的特征值转化为0到1区间内的值:

newValue = (oldValue-min)/(max-min)

 

     其中min和max分别是数据集中的最小特征值和最大特征值。虽然改变了数值取值范围增加了分类器的复杂度,但为了得到准确结果,我们必须这样做。

    在kNN.py中增加一个新函数autoNorm(),该函数可以自动将数字特征值转换为0到1的区间。

    

    归一化特征值

def autoNorm(dataSet):minVals = dataSet.min(0)maxVals = dataSet.max(0)ranges = maxVals - minValsnormDataSet = zeros(shape(dataSet))m = dataSet.shape[0]normDataSet = dataSet - tile(minVals, (m,1))normDataSet = normDataSet/tile(ranges, (m,1))   #element wise dividereturn normDataSet, ranges, minVals

 

     在函数sutoNorm()中,将每列的最小值放在变量minVals中,将最大值放在变量maxVals中,其中dataSet.min(0)中的参数0使得函数可以从列中选取最小值,而不是选取当前行的最小值。然后,函数计算可能的取值范围,并创建新的返回矩阵。

    为了归一化特征值,我们必须使用当前值减去最小值,然后除以取值范围。需要注意的是,特征值矩阵由1000×3个值,而minVals和range的值都为1×3。为了解决这个问题,我们使用Numpy库中title()函数将变量内容复制成输入矩阵同样大小的矩阵,注意这是具体特征值相除,而对于某些数值处理软件包,/可能意味着矩阵除法,但在NumPy库中,矩阵除法需要使用函数

 

 

    

 

转载于:https://www.cnblogs.com/Lamfai/p/10396330.html

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

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

相关文章

免费的UI素材网站

分享一个免费的UI素材网~ 国外的一个网站,可以通过关键字找到需要的UI https://www.flaticon.com/search?wordUI

分享一个很棒的免费壁纸网站

wallpapers,里面的壁纸都是免费的,而且都是质量很高的图片,可以用来做电脑壁纸,和用在软件ui上~ 可以直接右键保存图片 网站地址:https://wallhaven.cc/ 8K壁纸,像素很高,用在ui上建议压缩 下…

推荐一个免费绘制软件架构图的网站

GitMind 这个网站里可以绘制MarkDown的一些图形,不同于MarkDown的区别在于它是可视化的,用起来也比较简单。 如下图是我绘制的软件架构图:

html5标签 不可修改,SEO优化不可忽视的5个Html代码标签

SEO优化不可忽视的5个Html代码标签:1.Title 标签Title 标签是告诉搜索引擎网页内容的主题,一直是搜索引擎的抓取重点。通常,搜索引擎抓取Title标签出于两个目的:作为影响网页排名的重要因素和作为搜索结果页面的显示信息。不管是哪…

纯HTML+CSS网页设计期末作业(个人网站)

目录纯HTMLCSS网页设计期末作业(个人网站)源码链接效果展示index 页面about 页面hobbies 页面书籍介绍页面元曲介绍页面源码index.htmlindex.cssabout.htmlhobbies.htmlhobbies.cssme.htmlme.cssbook1.htmlbook.cssyuanqu.htmlyuanqu.css缺陷纯HTMLCSS网…

页面布局让footer居页面底部_网站页面结构与关键词布局技巧

网站页面布局的优化是搜索引擎优化的重要组成部分,也是网站关键词排名能否进入百度前三页甚至首页的关键,那么,网站布局优化怎么做更有利于排名?关于这点,我们分几点来讲解、搜索引擎优化一、网站站内结构布局1、网站代码优化布局…

wap建站程序源码_角点科技:企业搭建网站选择建站公司需要注意什么?

企业搭建网站选择网站建设公司需要注意些什么??现在很多企业都看到了网站的重要性,开始准备搭建企业网站,但是却不知道怎么样才能选择到一家专业且正规的网站建设公司,下面小编就来和你分享选择网站建设公司的小技巧&a…

vue企业门户网站模板_6 个火爆 GitHub 的后台管理模板,快来收藏!

今天来给大家介绍6个火爆 G 站的管理后台模板,有了它们,对于前端不是很熟悉的小伙伴来说,再也不用烦恼了,而且有一说一,即使是前端大牛,要想从零开发一套完整的管理模板,也不是一件容易的事情。…

搜索引擎优化的用乐云seo_搜索引擎优化SEO

搜索引擎优化,SEO(Search Engine Optimization),是指在了解诸如百度、搜狗等目标搜索网站的引擎自然排名机制基础上,对企业或产品网站进行内部及外部的调整优化,提升网页在搜索引擎自然搜索结果中的收录数量及排序位置而做的优化行…

igs网站里爬o文件和广播星历和tkinter使用

文章目录基础要求题目要求代码如下结果如下基础要求 莫烦python–基础 python基础学习-个人博客 Tkinter 学习 题目要求 需求就是我要从这个网站里爬o文件和广播星历 武汉大学IGS数据中心 代码如下 import time import urllib from tkinter import * import requests fro…

seo技术_基础知识_网站pr值的意义_日思663.带你入门SEO基础知识

2019/9/6这篇文章来自36氪产品团队一次内部分享,按照惯例记录下来,也分享给大家~本文937字,阅读约9分钟从上上周开始,产品团队每周都会请一位小伙伴给大家做分享,主题不限,以自己擅长或感兴趣的方向为出发点…

如何测试网站服务器mysql数据库连接,如何测试网站服务器mysql数据库

如何测试网站服务器mysql数据库 内容精选换一换您可根据业务需要,参考下载全量备份文件,并通过备份文件进行本地存储备份或者恢复数据。备份文件不支持恢复到本地为Windows操作系统的数据库。由于开源备份工具(XtraBackup)目前仅支持x86包,不…

网站数据分析:多渠道归因模型

转载自:http://www.itongji.cn/article/060R2002013.html 众所周知,在Google Analytics中跟踪一个设备是没有问题,而且很完善,但是在多个设备间切换就不行了,因为设备中都有浏览器,网站分析工具会将cookie放…

网站用户的生命周期价值

转载自:http://www.itongji.cn/article/111429242013.html什么是网站用户的生命周期价值(Lifetime Value,简称LTV),及为什么要使用LTV这个指标。其中主要阐述的是在SEM及网站推广的过程中不要仅关注于一次访问&#xf…

网站数据分析模型

转载自:http://www.itongji.cn/article/123130252013.html 网站分析方案能否彻底实施,最关键的在于是否有严密的方案,方案应该包括哪些内容呢?主要框架包括商业目标,围绕商业目标要解决的问题,需要什么数据…

理清网站数据分析思路导图

转载自:http://www.itongji.cn/article/1119293H013.html 下图是一个网站分析的生命周期示意图,在确认好分析需求并收集好我们所需要的数据后(强调一下,明确分析需求很重要,这可以避免为了分析而分析)&…

网站分析的数据来源

转载自:http://www.itongji.cn/article/101012142012.html Avinash Kaushik在他的《Web Analytics》一书中将数据的来源分为4部分:点击流数据(Clickstream)、运营数据(Outcomes)、调研数据(Rese…

网站获取ip代码怎么写_大学生写论文必备技能:怎么免费获取外文文献并下载...

无论是毕业季,还是平时查取论文。相信同学们都会有这样的苦恼,那就是——在学校知网网站资源里可以轻松查找到中文文献,但外文文献想要获取却非常的艰难。要么是要收费,要么就是进不去网站。为了解决大家的烦恼,接下来…

查询网站服务器类型,网站服务器类型查询

网站服务器类型查询 内容精选换一换当您想要直接使用域名访问网站、Web应用程序或者云服务器时,可以通过为域名增加A类型记录集实现。更多关于记录集类型的介绍,请参见记录集类型及配置规则。已经完成网站或云服务器的搭建,并获取IPv4格式的I…

分享45个海量免费电子书下载网站

转载自:http://www.cnblogs.com/lhb25/archive/2011/03/11/1978243.html 随着网络和信息技术的快速发展,电子书越来越流行。以Amazon Kindle为代表的电子书阅读器的出现改变了人们传统的阅读方式,如同iPod改变人们听音乐一样。如今&#xff0…