《机器学习实战》第二章 2.2用k-近邻算法改进约会网站的配对效果

news/2024/5/17 4:49:17/文章来源:https://blog.csdn.net/csdn_lzw/article/details/53350451

《机器学习实战》系列博客主要是实现并理解书中的代码,相当于读书笔记了。毕竟实战不能光看书。动手就能遇到许多奇奇怪怪的问题。博文比较粗糙,需结合书本。博主边查边学,水平有限,有问题的地方评论区请多指教。书中的代码和数据,网上有很多请自行下载。

KNN算法的应用

2.2.1 从文本文件中解析数据

函数的输入为文件名字符串,输出为训练样本矩阵和类标签向量。

解析程序

def file2matrix(filename):fr = open(filename)numberOfLines = len(fr.readlines())         #get the number of lines in the filereturnMat = zeros((numberOfLines,3))        #prepare matrix to returnclassLabelVector = []                       #prepare labels return   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

导入数据成功,检查一下数据

>>> import kNN
>>> datingDataMat,datingLabels = kNN.file2matrix('datingTestSet2.txt')
>>> datingDataMat
array([[  4.09200000e+04,   8.32697600e+00,   9.53952000e-01],[  1.44880000e+04,   7.15346900e+00,   1.67390400e+00],[  2.60520000e+04,   1.44187100e+00,   8.05124000e-01],..., [  2.65750000e+04,   1.06501020e+01,   8.66627000e-01],[  4.81110000e+04,   9.13452800e+00,   7.28045000e-01],[  4.37570000e+04,   7.88260100e+00,   1.33244600e+00]])
>>> datingLabels[0:20]
[3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3]

相关函数学习

  • open 函数
    语法:open(name[, mode[, buffering]]) r:读操作;w:写操作;a:添加操作;b:二进制存取操作 如果缺省就是r

例如:在C:\Users\lzw\Desktop\python 目录下新建一个txt文件 test_open.txt

命令行输入,就可以打开这个文件

>>> f=open('C:\\Users\\lzw\\Desktop\\python\\test_open.txt','r+')  # "\" 是转义符,要将他再转义
>>> 

如果是不加路径,只有一个文件名:f = open (‘test_open.txt’) 则必须保证!!! test_open.txt存储在我们的工作目录中

写文件操作

>>> f = open('test_open.txt', 'w')
>>> f.write('hello,')
>>> f.write('python\n')
>>> f.write('this is a test\n')
>>> f.write('lzw\n')
>>> f.close()
>>> 

打开 test_open.txt,可以看到原来空的txt 写入了内容
这里写图片描述

读文件操作

>>> f = open('test_open.txt')
>>> f.read(1)
'h'
>>> f.read(5)
'ello,'
>>> f.read()
'python\nthis is a test\nlzw\n'

readlines 逐行读取

>>> f = open('test_open.txt')
>>> f.readlines()
['hello,python\n', 'this is a test\n', 'lzw\n']
>>> 
  • zeros 函数
>>> from numpy import*
>>> zeros(3)
array([ 0.,  0.,  0.])
>>> zeros((2,3))
array([[ 0.,  0.,  0.],[ 0.,  0.,  0.]])
>>> zeros([2,3])   #和上一种一样
array([[ 0.,  0.,  0.],[ 0.,  0.,  0.]])
>>> zeros(3,int16)  #默认的是float型
array([0, 0, 0], dtype=int16)
>>> a=array([[2,3],[3,4]])
>>> zeros_like(a)    #返回和输入大小相同,类型相同,用0填满的数组
array([[0, 0],[0, 0]])
  • strip 函数 删除头尾字符串函数
>>> a = ' \n123\tabc\r'
>>> a.strip()  #删除头尾的字符串,默认为空白符(包括'\n', '\r',  '\t',  ' ')
'123\tabc'
>>> a.lstrip() #删除开头 
'123\tabc\r'
>>> a.rstrip() #删除结尾
' \n123\tabc'
>>> a.strip('12') 
' \n123\tabc\r'
>>> a = '12abc'
>>> a.strip('12')#删除字符串12
'abc'
>>> 

• split 函数拆分字符串。通过指定分隔符对字符串进行切片

>>> u = "www.doiido.com.cn"
>>> print u.split()  #使用默认分隔符
['www.doiido.com.cn']
>>> print u.split('.') #以"."为分隔符 
['www', 'doiido', 'com', 'cn']
>>> print u.split('.',1)  #分割一次
['www', 'doiido.com.cn']
>>> print u.split('.',2)  #分割两次
['www', 'doiido', 'com.cn']
>>> print u.split('.',2)[1]  #分割两次,并取序列为1的项
doiido
>>> u1,u2,u3 = u.split('.',2)#分割两次,并把分割后的三个部分保存到三个文件
>>> print u1
www
>>> print u2
doiido
>>> print u3
com.cn

2.2.2使用Matplotlib画散点图

kNN .py 程序里继续写,注意要import Matplotlib

散点图程序

datingDataMat,datingLabels = file2matrix('datingTestSet2.txt')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels))
plt.show()

这里写图片描述

相关函数学习

fig = plt.figure() #绘制一个figure对象

这里写图片描述

ax = fig.add_subplot(223) #将画布分割成2行2列,图像画在从左到右从上到下的第3块
这里写图片描述

scatter 画散点图

2.2.3归一化数值

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

归一化程序

def autoNorm(dataSet):minVals = dataSet.min(0)  #每一列最小值maxVals = dataSet.max(0)ranges = maxVals - minValsnormDataSet = zeros(shape(dataSet)) #返回矩阵大小和数据矩阵一样用0填充m = dataSet.shape[0]  #矩阵行数normDataSet = dataSet - tile(minVals, (m,1))normDataSet = normDataSet/tile(ranges, (m,1))   #element wise dividereturn normDataSet, ranges, minVals
>>> normMat
array([[ 0.44832535,  0.39805139,  0.56233353],[ 0.15873259,  0.34195467,  0.98724416],[ 0.28542943,  0.06892523,  0.47449629],..., [ 0.29115949,  0.50910294,  0.51079493],[ 0.52711097,  0.43665451,  0.4290048 ],[ 0.47940793,  0.3768091 ,  0.78571804]])
>>> ranges
array([  9.12730000e+04,   2.09193490e+01,   1.69436100e+00])
>>> minVals
array([ 0.      ,  0.      ,  0.001156])
>>> 

2.2.4测试算法:用错误率来检测分类器的性能

分离器性能测试程序

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):classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)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))print errorCount

这里写图片描述

这里写图片描述

2.2.5构建完整可用的系统

预测程序

def classifyPerson():resultList = ['不喜欢','魅力一般的人','极具魅力的人']percentTats = float(raw_input("percentgage of time spent playing video game ?"))ffMile = float(raw_input("frequent flier miles earned per year ?"))iceCream = float(raw_input("liters of ice Cream consumed per year ?"))datingDataMat ,datingLabels = file2matrix('datingTestSet2.txt')normMat ,ranges ,minVals = autoNorm (datingDataMat)inArr = array([ffMile,percentTats,iceCream])classifierResult = classify0((inArr - minVals)/ranges, normMat,datingLabels,3)print "You will probably like this person: ",resultList[classifierResult-1]
>>> reload(kNN)
<module 'kNN' from 'kNN.py'>
>>> kNN.classifyPerson()
percentgage of time spent playing video game ? 10
frequent flier miles earned per year ?10000
liters of ice Cream consumed per year ?0.5
You will probably like this person:  魅力一般的人
>>> 

相关函数学习

raw_input() 将所有输入作为字符串看待,返回字符串类型

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

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

相关文章

网站接入微信扫码登录并获取用户基本信息(微信开放平台)

现在的网站基本都接入微信登陆了&#xff0c;就好像下面这样的。 只需要用微信扫一下二维码&#xff0c;这个网站就可以展示你的微信昵称和头像&#xff0c;免去注册账号和输入密码登录的步骤&#xff0c;还免去设置头像和昵称的步骤&#xff0c;所以是挺方便的。 那么如何把自…

我的网站搭建: (第二天) 数据库选型

2019独角兽企业重金招聘Python工程师标准>>> 上一篇记录的是模型设计&#xff0c;也就是博客展示的基本功能&#xff0c;那么这些模型在进行数据迁移的时候就会产生数据。如何有效地保存好这些数据&#xff0c;这就是每一个开发者都值得去斗智斗勇的一件事&#xff…

推荐一个有趣的Chrome扩展程序-查看任意网站的开发技术栈

对于前端开发人员来说&#xff0c;目前的前端框架层出不穷&#xff0c;最受欢迎的莫过于所谓的前端框架三驾马车&#xff1a;Angular&#xff0c; React和Vue。在学习的过程中&#xff0c;肯定好奇现在的互联网公司的网站用的何种前端框架来开发的。 Chrome扩展程序商店里就提供…

如何免费的让网站启用HTTPS

点击上方蓝色字体&#xff0c;选择“置顶公众号”优质文章&#xff0c;第一时间送达来源&#xff1a;https://coolshell.cn/(酷壳网)今天&#xff0c;我把CoolShell变成https的安全访问了。我承认这件事有点晚了&#xff0c;因为之前的HTTP的问题也有网友告诉我&#xff0c;被国…

实现网站图片瀑布流重点记录

在前端通过js完成对瀑布流的实现&#xff0c;很简单&#xff0c;主要对前端很多知识不熟悉&#xff0c;在此做个记录&#xff0c;数据库中数据只添加了14张照片&#xff0c;通过重复取这14张照片模拟从数据库中取大量图片 主要的注意点在于initImg函数中&#xff0c;每次滑动到…

5个鲜为人知的黑科技网站,强大到不敢想象

作者&#xff1a;王嘻嘻_5578原文&#xff1a;http://suo.im/4vRcCZ如今的网站是越来越多&#xff0c;但许多黑科技网站却是不为人知&#xff0c;其实现在的网站都跟APP的功能相似&#xff0c;甚至许多好网站会比APP的作用更强更全面。今儿给亲们分享五款黑科技网站&#xff0c…

我是如何在两天内做完一个网站的

来源:http://suo.im/5eyK0X有点标题党的嫌疑&#xff0c;不过确实网站的主体是在两天内的完成的&#xff0c;后面只是抓取了素材和完善细节。以下内容绝对是赤裸裸的干货。**网站前期的准备&#xff1a; **1、买域名2、租服务器3、编写网站代码总体就这三步&#xff0c;但是每一…

使用Bootstrap 3开发响应式网站实践07,页脚

页脚部分比较简单&#xff0c;把一个12列的Grid切分。<footer><div class"container"><div class"row"><div class"col-sm-2"><h6>Copyright ©新浪体育</h6></div><div class"col-sm-4&…

高并发高流量网站架构

Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念&#xff0c;使得新生的网站有…

10个程序员需要收藏的良心网站,你绝对没有用过

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家&#xff08;已修复&#xff09;下一篇&#xff1a;昨天分享资料不小心把百度网盘深处的秘密泄露了&#xf…

快速建站利器!Github 上 10 个开源免费的后台控制面板

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家&#xff08;已修复&#xff09;下一篇&#xff1a;昨天分享资料不小心把百度网盘深处的秘密泄露了&#xf…

CSDN网站阅读更多:实现原理

一 设计案例 现在很多网站都增加了阅读更多功能。以CSDN为例&#xff0c;分析其实现原理。 二 设计原理 1 内容区的初始高度是固定的。 2 背景渐变的操作区&#xff0c;遮盖在内容区上面 3 点击按钮时&#xff0c;解除内容区的高度限制&#xff0c;同时移除操作区 三 模拟实现 …

这些网站利用起来,睡前双休时间都能赚点零花钱!

出来工作&#xff0c;说白了都是为了钱&#xff0c;什么理想&#xff0c;梦想&#xff0c;有了钱再说吧&#xff01; 很多朋友做着普通的工作&#xff0c;拿着微薄的工资&#xff0c;在这个大城市摸爬滚打&#xff0c;发现&#xff0c;钱总是不够用&#xff01; 有时会抱怨“为…

交公粮了:我经常逛的技术网站

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达zuo关注公众号后台回复pay或mall获取实战项目资料视频作者&#xff1a;三分恶来源&#xff1a;cnblogs.com/three-fighter/p/13641835.html众所周知&#xff0c;程序员是一个需要不断学习的职业…

用Nginx禁止国外IP访问我的网站...

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频作者&#xff1a;运维小弟出处&#xff1a;toutiao.com/i6860736292339057156/先来说说为啥要写这篇文章&#xff0c;之前看了下 Nginx 的访问…

又一神器,输入网址,点击下一步,瞬间克隆一个网站...!

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频HTTrack是一个免费的网站克隆工具。它允许您将Internet上的万维网站点下载到本地目录&#xff0c;以递归方式构建所有目录&#xff0c;并从服…

阿里云 + Ubuntu + WordPress 建造个人博客网站

前言 需要准备的东西&#xff1a; 需要注册一个域名域名需要备案需要购买一个ESC服务器 上述的操作&#xff0c;非常的简单&#xff0c;就不多叙述了 一、阿里云ESC服务器配置 1.首先远程连接服务器 输入用户名密码 根据提示输入&#xff0c;Linux 用户名一般为 root&…

新建的windows服务器总是弹出 “Internet Explorer增强安全配置正在阻止来自下列网站的此应用程序中的内容“

问题描述 最近由于工作原因&#xff0c;申请了一个windows服务器&#xff0c;打开自带的Internet Explorer&#xff0c;输入任何网址都会弹出该问题&#xff1a; 问题原因 windows服务器为了安全起见&#xff0c;默认启用了Internet Explorer 增强安全配置&#xff0c;当我…

最适合晚上睡不着看的 8 个网站,建议收藏哦

大家好&#xff0c;我是老赵1. 菜鸟教程一个涵盖了几乎所有编程教程的文档网站&#xff0c;不出意外你查询的所有 API 都可以在这里找到&#xff0c;不仅限于于前端、后端&#xff0c;还包括设计模式、工具等。官网&#xff1a;https://www.runoob.com/2. 慕课网一个涵盖了几乎…

一个网站从0到1搭建部署上线的完整流程(包教包会)

大家好&#xff0c;我是老赵&#xff01;有很多做网页的前端后端小白都想把自己辛辛苦苦做出来的网站放到网上&#xff0c;让别人观摩观摩。可无奈技术有限&#xff0c;对于网站部署流程有些迷茫。在这里&#xff0c;我会告诉大家&#xff0c;如何将自己做出来的网站放到网上。…