前篇:K-近邻算法开篇之电影
数据下载链接:https://pan.baidu.com/s/1qDPBH_E2lnq-_gWjTH4xSA
提取码:0vsp

Hellen经常使用约会网站寻找猎物用于解决自己的终身大事。时光流逝,Hellen还是single dog。她遇见了很多人,有好有坏,Hellen将约会网站上的人分为三类:不喜欢的人,魅力一般的人和极具魅力的人。为了以后的约会能尽可能与极具魅力的人在一起,Hellen需要对约会对象进行分类。

Hellen收集了一堆数据,每个样本包含三个特征:每年获得的飞行常客里程数,玩视频游戏所耗时间百分比和每周消费的冰淇淋公升数
部分数据如下所示:

数据的录入

import numpy as npdef load_data(filename):with open(filename) as file:lines = file.readlines()#读取所有的数据dataSize = len(lines)#获取数据量大小#构建一个dataSize*3大小的矩阵,用于存放数据集dataSet = np.zeros((dataSize,3))labels = [] #存放每行数据对应的分类标签(1,2,3,分别代表不喜欢,魅力一般和极具魅力)index = 0#逐行解析for line in lines:line = line.strip()#去除头尾的空格和换行符items = line.split("\t")dataSet[index,:] = items[0:3]#将数据存入dataSet中labels.append(int(items[-1]))index+=1return dataSet,labelsdata,labels = load_data("datingTestSet.txt")
print(data[:5,:])
print(labels[:5])

数据的展示

数据中总共有三个特征值,进行两两配对画图。

import matplotlib.lines as mlinesdef draw_image(data,labels):fig, axs = plt.subplots(nrows=2, ncols=2, sharex=False, sharey=False, figsize=(13, 8))LabelsColors = []#为每个分类设置颜色for i in labels:if i == 1:LabelsColors.append('black')if i == 2:LabelsColors.append('green')if i == 3:LabelsColors.append('red')# 飞行常客里程与玩游戏所占时间axs[0][0].scatter(x=data[:, 0], y=data[:, 1], color=LabelsColors, s=15, alpha=.5)# 飞行常客里程与冰激凌公升数axs[0][1].scatter(x=data[:, 0], y=data[:, 2], color=LabelsColors, s=15, alpha=.5)# 玩游戏所占时间与冰激凌公升数axs[1][0].scatter(x=data[:, 1], y=data[:, 2], color=LabelsColors, s=15, alpha=.5)# 设置图例样式didntLike = mlines.Line2D([], [], color='black', marker='.', markersize=6, label='didntLike')smallDoses = mlines.Line2D([], [], color='green', marker='.', markersize=6, label='smallDoses')largeDoses = mlines.Line2D([], [], color='red', marker='.', markersize=6, label='largeDoses')# 添加图例axs[0][0].legend(handles=[didntLike, smallDoses, largeDoses])axs[0][1].legend(handles=[didntLike, smallDoses, largeDoses])axs[1][0].legend(handles=[didntLike, smallDoses, largeDoses])# 保存图片plt.savefig("data.png")# 显示图片plt.show()

数据处理

观察数据我们会发现飞行常客里程数远大于另外两个特征值,并且飞行常客里程数往往相差比较大,这意味着在计算距离时这一特征的差值特别大,从而会严重影响预测结果。Hellen任务这三个特征的权重是一样的,所以我们需要对数据进行归一化操作。我们可以使用公式: n e w V a l u e = o l d V a l u e − m i n m a x − m i n newValue=\frac {oldValue-min}{max-min} newValue=max−minoldValue−min​ 实现归一化操作。

max:对应特征特征值的最大值;
min:对应特征特征值的最小值。

def norm(data):minvalues = data.min(axis=0)maxvalues = data.max(axis=0)rangevalues = maxvalues - minvalues#创建矩阵,用于存储归一化后的数据normData = np.zeros(data.shape)dataSize = data.shape[0]# 完成oldValue - minnormData = data - np.tile(minvalues,(dataSize,1))# 完成(oldValue - min) /(max-min)normData = normData / np.tile(rangevalues,(dataSize,1))#返回归一化后的数据return normData,rangevalues,minvalues

初步实现,计算错误率

KNN实现的方法请查看前篇:K-近邻算法开篇之电影
      选择100条数据用于做测试集,计算KNN算法对好感度预测的错误率如何。

if __name__ == '__main__':k=3errorCount=0.0rate = 0.1#测试集占所有数据的比例data,labels = load_data("datingTestSet.txt")normdata = norm(data)allNum = normdata.shape[0]testNum = int(rate*allNum)#已知数据1000条,我们选择100条作为测试集for i in range(testNum):result = classify(normdata[i,:],normdata[testNum:allNum,:],labels[testNum:allNum],k)print('第{}条数据,预测为:{}==>实际为:{}'.format(i+1,result,labels[i]))if result != labels[i]:errorCount+=1.0print('错误率为:',errorCount/testNum)


错误率为5%,预测的效果还不错。现在我们可以手动输入测试集,使用这个算法来进行预测了。

完成,形成可用系统

def main(case):k = 3data, labels = load_data("datingTestSet.txt")normdata,rangevalues,minvalues = norm(data)result = classify((case-minvalues)/rangevalues, normdata, labels, k)return resultif __name__ == '__main__':resultLabel = ['不喜欢','魅力一般','极具魅力']meters = float(input("请输入飞行常客里程数:"))gamerate = float(input("玩游戏所占实际比:"))icecream = float(input("每周冰淇淋消费数:"))input_case = np.array([meters,gamerate,icecream])#输入的数据也要进行归一化result = main(input_case)print("预测结果为:",resultLabel[result-1])

KNN算法之好感度预测相关推荐

  1. 使用KNN算法对鸢尾花种类预测

    使用KNN算法对鸢尾花种类预测 一. 数据集介绍 1.1 小数据集获取 load_* 1.2 大数据集获取 fetch_* 1.3 查看数据分布 seaborn画图的 二. 数据集的划分 三. 特征工 ...

  2. knn算法python理解与预测_理解KNN算法

    KNN主要包括训练过程和分类过程.在训练过程上,需要将训练集存储起来.在分类过程中,将测试集和训练集中的每一张图片去比较,选取差别最小的那张图片. 如果数据集多,就把训练集分成两部分,一小部分作为验证 ...

  3. 机器学习之Python使用KNN算法进行电影类型预测

    1. 使用KNN进行电影类型预测: 给定训练样本集合如下: 求解:testData={"老友记": [29, 10, 2, "?片"]}. 解题步骤: 1.计算 ...

  4. knn算法python理解与预测_K近邻算法用作回归的使用介绍(使用Python代码)

    介绍 在我遇到的所有机器学习算法中,KNN是最容易上手的.尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样). 甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更 ...

  5. KNN算法简单应用之预测队伍胜利

    爬取了2019年LPL职业联赛的一些数据,通过大小龙,推塔数,以及队伍击杀数来预测队伍胜利,所以分为爬虫和knn算法俩块 首先是爬虫部分,根据网页结构,创造了一个大列表来储存所有要爬取的url,然后循 ...

  6. 有监督学习 —— KNN算法

    KNN应用 1.KNN简介 1.1 KNN算法优缺点 2.KNN算法的思想 3.最佳K值的选择 4.相似度的度量方法 4.1 距离定义 4.2 欧式距离 4.3 曼哈顿距离 4.4 余弦相似度 4.5 ...

  7. 机器学习之kNN算法(纯python实现)

    前面文章分别简单介绍了线性回归,逻辑回归,贝叶斯分类,并且用python简单实现.这篇文章介绍更简单的 knn, k-近邻算法(kNN,k-NearestNeighbor). k-近邻算法(kNN,k ...

  8. knn算法中k值的理解

    knn算法是指对预测集中的每一个图像与训练集中的所有图像比较,寻找出在训练集中与这一张预测图片最接近的图像,将该图像的标签给这张预测图片.实施的方法为图像矩阵相减并取绝对值,然后将得到的像素矩阵各元素 ...

  9. 计算机毕业设计之大数据机器学习Python+SpringBoot考研分数分析与预测系统 大数据毕业设计 考研大数据分析 考研大数据预测 考研数据分析 KNN算法 人工智能

    创新点 (1)将数据分析与预测相结合: (2)采用数据可视化技术,简洁高效的将数据展示给用户,提升用户体验: (3)有效Python采集多个地区.多所大学的相关考研信息: (4)系统采用人机交互的方式 ...

最新文章

  1. 使用Convirt 2.0.1管理虚拟机环境
  2. LoadRunner中的参数与变量
  3. 登陆xp系统,无法显示桌面
  4. 为什么选择springcloud
  5. mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file
  6. 如何实现DataGridView刷新数据?
  7. 景驰无人车北京子公司上亿资金被冻结!潘思宁夺回法人身份
  8. VS 母版使用配置技巧
  9. 数据结构--(AVL)平衡二叉树
  10. Altium Designer元件库常见获取方法
  11. 基于JQUERY的WEB在线流程图设计器GOOFLOW 0.5版 数据值解析
  12. 小米官网竖直导航栏html,小米官网css3导航菜单代码_html/css_WEB-ITnose
  13. 日常记账后,图表查看账目类别
  14. hackbar工具安装使用教程
  15. node.js-day04
  16. [xueqi]吃着榨菜,轻松搞下漏洞百出的湾湾站
  17. 《数据结构(C语言版)》严巍敏课件~第一章:绪论
  18. 利用unity和steamVR完成场景漫游(五) 学习VRTK中简单案例
  19. Oracle对象——视图之简单视图与视图约束
  20. ORA-600 16703--oracle介质被注入恶意脚本

热门文章

  1. 织梦dede如何让channelartlist标签支持currentstyle属性
  2. 沉痛悼念织梦创始人林学先生,他为网站开源系统打开了大门
  3. 国内从事CV相关的企业及链接(排名不分先后)
  4. Opera浏览器抽疯,点击后可响应,可在任务栏显示缩略图,但无法在桌面显示的解决方案及书签文件查找
  5. SSH Config 允许使用root密码登陆 PermitRootLogin
  6. archlinux php imagemagick,archlinux 以及fvwm 的一些简单配置 来自网络
  7. 提效利器,定时器软件,小巧、绿色、免费~
  8. 一文解读,网络安全行业人才需求情况
  9. Claims 认证详解(1)
  10. c++ getline