通过余弦相似度找物品之间的联系
- 由于毕设用到了推荐算法,这几天在搜索资料,对基于项目的协同过滤算法有了一定的理解,我的理解就是“物以类聚”。通过所有用户对某一商品的评分,来寻找商品之间的相似度。在这里我用的是利用求余弦的方式来判别。
- 程序主要解决了2个问题
- 1、评分中心化:不同的用户打分喜好不同,有的人喜欢打高分,例如喜欢打5分不喜欢打3分,有的人喜欢打低分,例如喜欢打4分不喜欢打1分,这样对数据是有影响的,因此需要平分中心化。除此之外对于一个用户他没有评价的商品,默认为0,这个0有着极大的不喜欢的意义,这对于数据的分析也有影响,我们要想办法,把这个默认0设定为一个中性的,既不影响喜欢的程度,也不影响不喜欢的程度。
- 2、实现余弦求相似度的计算:简单的一个向量点乘坐标计算实现的公式,不难。
#include <iostream>#include <math.h>using namespace std;double item[100][100];double value[100][100];double consin[100][100];void get_cos(int x,int y){//计算a点乘bdouble a=0;for(int i=1; i<6; i++)a += value[i][x]*value[i][y];//计算 a,b 的模长double b=0, c=0 ;for(int i=1; i<6; i++){b += pow(value[i][x],2);c += pow(value[i][y],2);}//开根号b = sqrt(b);c = sqrt(c);consin[x][y] = a/(b*c);}int main(){cout<<"现假设有用户5人,商品五个,请随机输入部分用户对部分物品的评分"<<endl;for(int i=1; i<6; i++)for(int j=1; j<6; j++)cin>>item[i][j];cout<<"用户的评分表如下"<<endl;cout<<"用户\t物品1\t物品2\t物品3\t物品4\t物品5"<<endl;for(int i=1; i<6; i++){cout<<"用户"<<i<<"\t";for(int j=1; j<6; j++){cout<<item[i][j]<<"\t";}cout<<endl;}cout<<"用户商品评分中心化"<<endl;for(int i=1; i<6; i++){double sum = 0;int n = 0;for(int j=1; j<6; j++){sum +=item[i][j];if(item[i][j] >0)n++;}if(sum==0) sum = 0;else{sum = sum/(n*1.0);}for(int j=1; j<6; j++)if(item[i][j] > 0)value[i][j] =item[i][j] - sum;}cout<<"用户的评分表如下"<<endl;cout<<"用户\t物品1\t物品2\t物品3\t物品4\t物品5"<<endl;for(int i=1; i<6; i++){cout<<"用户"<<i<<"\t";for(int j=1; j<6; j++){cout<<value[i][j]<<"\t";}cout<<endl;}cout<<"正在进行物品相似度计算。。。。。。。"<<endl;for(int i=1; i<=5; i++){for(int j=1; j<=5; j++)get_cos(i,j);}cout<<"物品的相似度表如下"<<endl;cout<<"物品\t物品1\t物品2\t物品3\t物品4\t物品5"<<endl;for(int i=1; i<6; i++){cout<<"物品"<<i<<"\t";for(int j=1; j<6; j++){cout<<consin[i][j]<<"\t";}cout<<endl;}}
- 已知对于两个向量a,b,当向量相等时,其夹角为0,余弦值为1,向量相反时,夹角为π,余弦值为-1,故当两个物品相似度越高的时候,他们的余弦值越大,如图所示,物品1和物品2有着极大的相似度,物品4和物品5有着极大的相似,因此对于购买物品1没有购买物品2的用户就可以将物品2推荐给他。
通过余弦相似度找物品之间的联系相关推荐
- 相似度计算(1)——余弦相似度
余弦相似度 余弦相似度:用向量空间中两向量夹角的余弦值作为衡量两个个体之间差异的大小.余弦值越接近1,表明两个向量的夹角越接近0度,则两个向量越相似.余弦值越接近0,表明两个向量的夹角越接近180 ...
- python求反余弦_余弦相似度计算公式:python代码找出相似文章
余弦相似度计算公式:python代码找出相似文章 用TF-IDF算法可以自动提取关键词.除了找到关键词,怎么找到与原文章相似的其他文章.比如,"百科TA说"在词条最下方,还提供多条 ...
- 余弦相似度/卷积核之间的成对余弦相似性
目录 定义: 例子: python函数计算余弦相似性 定义: 余弦距离,也称为余弦相似度,是用向量空间中两个向量之间的夹角余弦值作为衡量两个个体之间的差异大小的度量.(不难理解,余弦相似度就是基于两个 ...
- python勾股定理中三个数的关系是、找出三十以内的_从勾股定理到余弦相似度-程序员的数学基础...
大部分程序员由于理工科的背景,有一些高数.线性代数.概率论与数理统计的数学基础.所以当机器学习的热潮来临的时候,都跃跃欲试,对机器学习的算法以及背后的数学思想有比较强烈的探索欲望. 本文的作者就是其中 ...
- pytorch一行实现:计算同一tensor矩阵内每行之间的余弦相似度
文章目录 0 输入数据 1 余弦相似度(Cosine Similarity) 2 torch.cosine_similarity 3 问题 4 分析与解决 4.1 答案 5 另外的实现方法 0 输入数 ...
- 计算特征矩阵之间的余弦距离(余弦相似度)
转自两矩阵各向量余弦相似度计算操作向量化.md - 苏轶然 - 博客园 (cnblogs.com)https://www.cnblogs.com/suanec/p/9121092.html 对A,B矩 ...
- Python基于修正余弦相似度的电影推荐引擎
//2022.7.15更新,经评论区提醒,更正cosine函数相关描述. 数据集下载地址:MovieLens 最新数据集 数据集包含600 名用户对 9,000 部电影应用了 100,000 个评级和 ...
- 相似度计算方法(三) 余弦相似度
一. 余弦相似度算法基本概念 余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于 ...
- 推荐系统入门学习(二)【余弦相似度|皮尔逊相关系数】
搭建你的第一个推荐系统 初识推荐系统 最初的推荐系统,作用是过滤垃圾邮件.今日机器学习算法的发展,朴素贝叶斯.神经网络已然成为了过滤垃圾邮件的好手.但是在30年前,算法还没有如今使用得广泛的时候,&q ...
最新文章
- dropout层_DNN,CNN和RNN的12种主要dropout方法的数学和视觉解释
- boost::spirit模块实现一个雇员结构的解析器的测试程序
- 作为工程师,你真的了解无服务器?
- 区块链xuperchain ubuntu多机多节点 single共识 部署教程
- Atitit 文档资料处理重要类库与工具 跨语言api和第三方api跨语言 类库工具	大概功能	功能 Curl	httpclient	文件上传下载 数据传输rest doctotext.exe
- gitlab mr wip 怎么弄成_Gitlab基本管理(二)
- nginx 的基本配置
- 浅析MyBatis执行器原理
- 洛谷OJ1162 填涂颜色 DFS填色法
- ps快速抠头发-庞姿姿
- 此Flash Player 与您的地区不相容,请重新安装Adobe Flash Player问题解决
- 如何设置显示网络计算机,如何在台式计算机上设置无线局域网络
- Scrapy爬虫框架,爬取小说网的所有小说
- H265摄像头如何实现网页直播
- 2020.08.20_Task1_基于逻辑斯特模型,实现分类预测
- 推荐系统在美团综合业务中的应用及实践
- linux配置4g网络命令_Linux常用操作练习汇总
- 计算机毕业设计 SpringBoot+Vue党建管理系统 教育党建系统 智慧党建系统 党建信息管理系统Java Vue MySQL数据库 远程调试 代码讲解
- [HNOI2006]潘多拉的宝盒
- 元气森林、波士顿咨询、毕马威等 20+ 嘉宾齐聚观远数据2022智能决策峰会