Python3代码实现《机器学习实战》k近邻算法改进约会网站配对效果中出现的问题

news/2024/5/10 3:05:18/文章来源:https://blog.csdn.net/wumenglu1018/article/details/87930927

报错1:No module named ‘kNN’

解决:

转而在Spyder中,先保存在自己的学习目录中,然后在命令提示符完成操作,保证目录要一致,也就是下面图中打马赛克的4个。

 

报错: name ‘reload’ is not defined

解决:

先调用imp标准库模块中可用的reload函数, 再模块重载

报错:ValueError: invalid literal for int() with base 10: 'largeDoses'

解决:

将datingClassTest()函数中第二行代码,打开的文件名改为datingTestSet2.txt即可。

原因:

比较datingTestSet.txt和datingTestSet2.txt,主要的区别是最后的标签,datingTestSet.txt中使用字符串‘veryLike’作为标签,但是Python转换会出现ValueError: invalid literal for int() with base 10: 'largeDoses'的错误。后面datingTestSet2.txt中直接用1 2 3 代表not like, general like, very like,所以可以正常解析。

最终成功执行结果:

附完整代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Feb 25 11:32:55 2019@author: Administrator
"""# 导入科学计算包Numpy
import numpy as np
# 导入运算符模块,k-近邻算法执行排序操作时将使用这个模块提供的函数
import operator '''
为了确保输入相同的数据集,kNN模块中定义了函数createDataSet
'''
def createDataSet():group = np.array([[1.0 , 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])labels = ['A', 'A', 'B', 'B']  # 包含了每个数据点的标签信息return group, labels'''
classify0有四个输入变量,用于分类的输入向量是inX,输入的样本集是dataSet,
标签向量为labels,k是用于选择最近的邻居数目,其中标签向量的元素数目和矩阵
dataSet的行数相同。
'''
def classify0(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]  #返回矩阵的行数,即有多少组数据diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet  #tile函数的作用是让某个数组以某种方式重复,构造出新的数组sqDiffMat = diffMat ** 2sqDistances = sqDiffMat.sum(axis = 1)  #将矩阵的每一行向量相加distances = sqDistances ** 0.5sortedDistIndicies = distances.argsort()  #对距离进行递增排序,返回值是数值对应的索引值classCount = {}  #创建字典for i in range(k):voteIlabel = labels[sortedDistIndicies[i]]  #get(voteIlabel, 0):返回指定键的值,若不在字典中就返回0classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1  #按照第二个元素的次序对元组进行从大到小的排序sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True)return sortedClassCount[0][0]  #返回发生频率最高的元素标签'''
处理输入的格式问题
'''
def file2matrix(filename):fr = open(filename)  #打开文件arrayOLines = fr.readlines()  #返回列表,包含所有的行numberOfLines = len(arrayOLines)  #得到文件的行数returnMat = np.zeros((numberOfLines, 3))  #创建返回的Numpy矩阵classLabelVector = []  index = 0for line in arrayOLines:line = line.strip()   #截取掉所有的回车符listFromLine = line.split('\t')  #将整行数据分割成一个元素列表returnMat[index, :] = listFromLine[0: 3]  #选取前三个元素,将它们存储到特征矩阵中tclassLabelVector.append(int(listFromLine[-1]))  #将列表中的最后一列存储到向量中index += 1return returnMat, classLabelVector  #输出为训练样本矩阵和类标签向量'''
归一化特征值,将数字特征值转化为0~1的区间
'''
def autoNorm(dataSet):minVals = dataSet.min(0)  #参数0使得函数可以从列中选取最小值,而不是选取当前行的最小值maxVals = dataSet.max(0)  #选取列的最大值ranges = maxVals - minVals  #返回矩阵的规模normDataSet = np.zeros(np.shape(dataSet))m = dataSet.shape[0]  #返回数据集中矩阵的行数# minVals与ranges都是1*3的矩阵,通过tile函数被扩展为m*3的矩阵,这就是tile函数的作用normDataSet = dataSet - np.tile(minVals, (m,1))normDataSet = normDataSet / np.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.0for i in range(numTestVecs):#normMat[i,:]是指用于分类的测试数据;normMat[numTestVecs:m,:]是指其他90%的训练数据;datingLabels[numTestVecs:m]是指训练数据对应的标签;k=3classifierResult = classify0(normMat[i,:], normMat[numTestVecs:m,:], datingLabels[numTestVecs:m], 3)       #datingLabels[i]是指测试数据在原数据集中的真实标签print("the classifier came back with : %d, the real answer is : %d" %(classifierResult, datingLabels[i]))if(classifierResult != datingLabels[i]):errorCount += 1.0print("the total error rate is : %f" % (errorCount / float(numTestVecs)))'''
约会网站预测函数
'''           
def classifyPerson():resultList = ['not at all', 'in small doses', 'in large doses']#三个输入特征值:percentTats = float(input('percentage of time spent playing video games? '))ffMiles = float(input('frequent flier miles earned per year? '))iceCream = float(input('liters of ice cream consumed per year? '))datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')   #解析文本文件normMat, ranges, minVals = autoNorm(datingDataMat)  #归一化数据inArr = np.array([ffMiles, percentTats, iceCream])  #classify0的三个输入数据分别是:用于分类的输入向量,输入的数据集,标签向量,最近的邻居数目classifierResult = classify0((inArr-minVals) / ranges, normMat, datingLabels, 3) print("You will probably like this person: ", resultList[classifierResult - 1])'''
数据可视化  
'''
import matplotlib.pyplot as plt
datingDataMat,datingLabels = file2matrix("datingTestSet2.txt") 
#获取figure对象
fig = plt.figure() 
#指定图像所在的子视图位置,add_subplot(nmi),意思为在fig视图被划分为n*m个子视图,i指定接下来的图像放在哪一个位置
ax = fig.add_subplot(111) 
#画出散点图,坐标分别为datingDataMat的第一列数据与第二列数据,利用15*datingLabels的1、2、3作为不同点的颜色和尺寸
ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*np.array(datingLabels), 15.0*np.array(datingLabels))
plt.show()'''
测试
'''
classifyPerson()

 

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

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

相关文章

网站的高性能架构

原文地址:http://www.uml.org.cn/zjjs/201312192.asp 瞬时响应:网站的高性能架构作者 李智慧,火龙果软件 发布于:2013-12-19什么叫高性能的网站? 两个网站性能架构设计方案:A方案和B方案,A方案…

VS.NET2013发布网站的时候去掉.cs文件(预编译)(转)

在要发布的网站上右键,选择"发布网站"。在发布窗口中,会让你选择一个发布配置文件,没有的话点击下拉菜单在里面选择新建一个。NEXT.好,现在发布一下网站。发布出来的文件没有包含*.cs文件。打开bin目录,会发…

大型网站架构演变和知识体系

转自:http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详…

Linux部署集群.NET网站

一、Linux下面安装需要软件 我们这里需要安装的软件有:1) Mono 3.2.8 : C#跨平台编译器,能使.Net运行与Linux下,目前.net 4.0可以完美运行在该平台下2) nginx/1.4.6 :web服务器, 支持方向代理3) fastcgi-mono-server4 &#xff1a…

在mvc4中多语言建站的实例

环境:vs2012 asp.net mvc4. 实现方式:resource 资源文件,根据路由规则中Lang参数来判断载入哪种语言方式 在网上找到了相关资料,顺便自己做了个练习,新建工程之类的步骤就免了,该注意的地方说明下&#xff…

台北到淡水版Firefox新标签页myNewTab网站链接修改

台北到淡水版的Firefox用的新标签页(也叫快捷导航、九宫格等)是myNewTab,如何修改里面的链接呢?如下: 1、点击右上角的”定位“​ 2、将会打开该文件的所在位置,例如:D:\应用程序\火狐浏览器\Pr…

如何在 ASP.NET 应用程序中实现模拟用户身份(在ASP.NET中以管理员身份运行网站)...

前言 在实际的项目开发中,我们可能会需要调用一些非托管程序,而有些非托管程序需要有更高的身份权限才能正确执行。本文介绍了如何让IIS承载的ASP.NET网站以特定的账户执行,比如Administrator。 概要 本文介绍了在 ASP.NET 应用程序中实现模拟…

浅谈Web网站的架构演变过程

前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理阶段一、单机构建网站 网站…

varnish加速web网站

简介 Varnish可以有效降低web服务器的负载,提升访问速度。根据官方的说法,Varnish是一个cache型的HTTP反向代理。 按照HTTP协议的处理过程,web服务器接受请求并且返回处理结果,理想情况下服务器要在不做额外处理的情况下&#xff…

手把手教你从零开始用WordPress建站

最近,很多人来问我,怎么做一个实际项目?其实这个说简单也简单,说复杂也复杂,但是不管怎么样,从今天开始,一步一步的走,你肯定可以做一个属于自己的站点。 之前我也在群里说了&#x…

快盘做网站服务器,快盘云服务器地址

快盘云服务器地址 内容精选换一换在您申请了云耀云服务器后,可以通过管理控制台查看和管理您的云耀云服务器。本节介绍如何查看云耀云服务器的详细配置,包括云耀云服务器名称、镜像信息、系统盘、数据盘、安全组、弹性公网IP等信息。登录管理控制台。单击…

websocket用ip不能访问_为什么直接用IP不能访问知乎的网站,而百度却可以?

打开cmd,输入ping baidu.com,然后把得到的ip地址111.13.101.208输入浏览器的地址栏,可以打开百度。但我重复操作ping zhihu.com,得到ip地址54.223.189.245,输入地址栏,返回的却是405 not allowed。想请教一…

网站模板怎么和虚拟服务器,模板站用虚拟主机还是用服务器

模板站用虚拟主机还是用服务器 内容精选换一换本章指导用户使用华为云市场镜像“PHP运行环境AMH4.2面板PHP CentOS6.8”部署AMH环境。AMH是一套通过Web控制和管理服务器的Linux服务器管理系统以及虚拟主机管理系统。弹性云服务器创建成功后,还需要配置安全组&#x…

aix如何查看日志策略_企业网站排名,SEO诊断,网站日志分析经常忽略的6个细节!...

在做SEO的过程中,我们总是会遇到各种莫名其妙的问题,比如:某一天你的网站突然出现收录缓慢的问题,而平时都是秒收录。 最开始我们在做审查的时候,总是在思考: ①是否搜索引擎算法在调整。 ②是否自己的内容…

pHP分析网站日志,通过用数据挖掘技术来分析Web网站日志?

Web日志挖掘是指采用数据挖掘技术,对站点用户访问Web服务器过程中产生的日志数据进行分析处理,从而发现Web用户的访问模式和兴趣爱好等,这些信息对站点建设潜在有用的可理解的未知信息和知识,用于分析站点的被访问情况&#xff0c…

如何进行web端安全性测试_如何使用LoadRunner进行Web网站性能测试?

loadrunner压力测试原理本质就是在loadrunner上模拟多个用户同时按固定行为访问web站点。其中固定行为在loadrunner中是通过录制脚本定义的,多个用户同时访问的策略是在loadrunner的场景中定义的loadrunner压测思路通过loadrunner进行压力测试web应用的主要思路分两…

一个好用的在线微信二维码设计网站

帮一个朋友设计他的微信公众号二维码,本来打算用ps画图,想到之前公众号配图有在线网站,简单方便,类似于这类的工具应该会有很多,在百度上查找体验了一下,终于找到了一款可以快速设计文章末尾二维码的在线网…

计算机找不到was服务器,win7系统搭建网站提示计算机“.”上没有找到wAs服务的图文步骤?...

win7系统搭建网站提示计算机“.”上没有找到wAs服务的图文步骤??在win7系统中,很多用户都会在电脑中使用iis搭建网站,然而在安装完iis,添加了网站之后,网站图标上有一个红叉,单击右键,启动,会…

seo2 php什么意思,url对seo最友好的是

对于静态网站来说,一定程度上来说url可以是每个页面唯一的"身份标志",对于搜索引擎优化(SEO)来说网站url设置是否合理,页影响着最终的效果,达到事半功倍的效果,今天我根据以往经验来说什么样网站url对于百度…

表格标题浮动html,HTML和CSS 入门系列(二):文字、表单、表格、浮动、定位、框架布局、SEO...

一、文字1.1 属性1.2 字体样式:font-family1.3 字体大小:font-size1.4 字体粗细:font-weight1.5 字体风格:font-style1.6 行高:line-height二、表单点击文字自动关联:三、表格四、浮动4.1 清除浮动.d-paren…