KNN算法之好感度预测
前篇: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算法之好感度预测相关推荐
- 使用KNN算法对鸢尾花种类预测
使用KNN算法对鸢尾花种类预测 一. 数据集介绍 1.1 小数据集获取 load_* 1.2 大数据集获取 fetch_* 1.3 查看数据分布 seaborn画图的 二. 数据集的划分 三. 特征工 ...
- knn算法python理解与预测_理解KNN算法
KNN主要包括训练过程和分类过程.在训练过程上,需要将训练集存储起来.在分类过程中,将测试集和训练集中的每一张图片去比较,选取差别最小的那张图片. 如果数据集多,就把训练集分成两部分,一小部分作为验证 ...
- 机器学习之Python使用KNN算法进行电影类型预测
1. 使用KNN进行电影类型预测: 给定训练样本集合如下: 求解:testData={"老友记": [29, 10, 2, "?片"]}. 解题步骤: 1.计算 ...
- knn算法python理解与预测_K近邻算法用作回归的使用介绍(使用Python代码)
介绍 在我遇到的所有机器学习算法中,KNN是最容易上手的.尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样). 甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更 ...
- KNN算法简单应用之预测队伍胜利
爬取了2019年LPL职业联赛的一些数据,通过大小龙,推塔数,以及队伍击杀数来预测队伍胜利,所以分为爬虫和knn算法俩块 首先是爬虫部分,根据网页结构,创造了一个大列表来储存所有要爬取的url,然后循 ...
- 有监督学习 —— KNN算法
KNN应用 1.KNN简介 1.1 KNN算法优缺点 2.KNN算法的思想 3.最佳K值的选择 4.相似度的度量方法 4.1 距离定义 4.2 欧式距离 4.3 曼哈顿距离 4.4 余弦相似度 4.5 ...
- 机器学习之kNN算法(纯python实现)
前面文章分别简单介绍了线性回归,逻辑回归,贝叶斯分类,并且用python简单实现.这篇文章介绍更简单的 knn, k-近邻算法(kNN,k-NearestNeighbor). k-近邻算法(kNN,k ...
- knn算法中k值的理解
knn算法是指对预测集中的每一个图像与训练集中的所有图像比较,寻找出在训练集中与这一张预测图片最接近的图像,将该图像的标签给这张预测图片.实施的方法为图像矩阵相减并取绝对值,然后将得到的像素矩阵各元素 ...
- 计算机毕业设计之大数据机器学习Python+SpringBoot考研分数分析与预测系统 大数据毕业设计 考研大数据分析 考研大数据预测 考研数据分析 KNN算法 人工智能
创新点 (1)将数据分析与预测相结合: (2)采用数据可视化技术,简洁高效的将数据展示给用户,提升用户体验: (3)有效Python采集多个地区.多所大学的相关考研信息: (4)系统采用人机交互的方式 ...
最新文章
- 使用Convirt 2.0.1管理虚拟机环境
- LoadRunner中的参数与变量
- 登陆xp系统,无法显示桌面
- 为什么选择springcloud
- mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file
- 如何实现DataGridView刷新数据?
- 景驰无人车北京子公司上亿资金被冻结!潘思宁夺回法人身份
- VS 母版使用配置技巧
- 数据结构--(AVL)平衡二叉树
- Altium Designer元件库常见获取方法
- 基于JQUERY的WEB在线流程图设计器GOOFLOW 0.5版 数据值解析
- 小米官网竖直导航栏html,小米官网css3导航菜单代码_html/css_WEB-ITnose
- 日常记账后,图表查看账目类别
- hackbar工具安装使用教程
- node.js-day04
- [xueqi]吃着榨菜,轻松搞下漏洞百出的湾湾站
- 《数据结构(C语言版)》严巍敏课件~第一章:绪论
- 利用unity和steamVR完成场景漫游(五) 学习VRTK中简单案例
- Oracle对象——视图之简单视图与视图约束
- ORA-600 16703--oracle介质被注入恶意脚本
热门文章
- 织梦dede如何让channelartlist标签支持currentstyle属性
- 沉痛悼念织梦创始人林学先生,他为网站开源系统打开了大门
- 国内从事CV相关的企业及链接(排名不分先后)
- Opera浏览器抽疯,点击后可响应,可在任务栏显示缩略图,但无法在桌面显示的解决方案及书签文件查找
- SSH Config 允许使用root密码登陆 PermitRootLogin
- archlinux php imagemagick,archlinux 以及fvwm 的一些简单配置 来自网络
- 提效利器,定时器软件,小巧、绿色、免费~
- 一文解读,网络安全行业人才需求情况
- Claims 认证详解(1)
- c++ getline