基于内容的推荐 java实现
- 这是本人在cousera上学习机器学习的笔记,不能保证其正确性,慎重參考
- 看完这一课后Content Based Recommendations 后自己用java实现了一下
1、下图是待处理的数据,代码使用数据和下图一样:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHpoNDc2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
2、思路:对每一个用户假定其为一个3维向量(在代码中初始化为[1,1,1]的转置,然后採用梯度下降法不断的对这个3维向量的值进行更新)。如果更新到最后的向量值为[0,5,0]的转置,然后使用该向量和电影“Cute puppoes of love”的特征向量进行计算,就可以得到该电影的预測分为4.95。
3、使用梯度下降法对某个用户的向量进行更新(我在代码中没有考虑正则化这一问题,如今还不懂正则化。后面学会了就附上加了正则化的):
下图为没有使用正则化的函数:
4、以下仅针对用户carol进行了代码实现
public class ContentBase {
private static int[][] rate_set = { { 5, 5, 0, 0 }, { 5, -1, -1, 0 },
{ -1, 4, 0, -1 }, { 0, 0, 5, 4 }, { 0, 0, 5, -1 } };
private static double[][] m_feature = { { 0.9, 0 }, { 1.0, 0.01 },
{ 0.99, 0 }, { 0.1, 1.0 }, { 0, 0.9 } };
//仅针对用户carol进行了代码实现
public static void main(String[] args) {
double t = 0.1;
double[] para = { 1.0, 1.0, 1.0 };
double[] partial = new double[3];
double min = 0.0;
int i = 0, j, u,times=0;
double temp,temp2;
//100为用户2的向量学习次数
while(times++<100){
min=0.0;
i=0;
//该while循环计算代价函数
while (i < 5) {
temp = 0.0;
if (rate_set[i][2] != -1) {
for (u = 0; u < 3; u++) {
if (u == 0)
temp += para[u];
else
temp += para[u] * m_feature[i][u - 1];
}
min += (temp - rate_set[i][2]) * (temp - rate_set[i][2]);
}
i++;
}
System.out.print("当用户 carol的向量值为[");
for(j=0;j<3;j++)
if(j!=2)
System.out.print(para[j]+",");
else
System.out.println(para[j]+"]时,min="+min);
System.out.println();
for (j = 0; j < 3; j++) {
i = 0;
partial[j] = 0;
while (i < 5) {
temp = 0.0;temp2=0.0;
if (rate_set[i][2] != -1) {
for (u = 0; u < 3; u++) {
if (u == 0)
temp += para[u];
else
temp += para[u] * m_feature[i][u - 1];
}
temp2 += temp - rate_set[i][2];
if (j != 0)
temp2 *= m_feature[i][j - 1];
partial[j]+=temp2;
}
i++;
}
}
//依据求得的偏导数 partial来更新某用户的參数值
for (j = 0; j < 3; j++) {
para[j] = para[j] - t * partial[j];
}
}
}
}
4、执行结果:
注:部分图片来源为 机器学习-吴恩达 中的视频截图
基于内容的推荐 java实现的更多相关文章
- ElasticSearch java API-使用More like this实现基于内容的推荐
ElasticSearch java API-使用More like this实现基于内容的推荐 基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查 ...
- Recommender Systems基于内容的推荐
基于内容的推荐的基本推荐思路是:用户喜欢幻想小说,这本书是幻想小说,则用户有可能喜欢这本小说 两方面要求:(1)知道用户的喜好:(2)知道物品的属性 基于内容的推荐相比协同过滤方法(个人观点):协同过 ...
- 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)
https://blog.csdn.net/qq_32690999/article/details/77434381 因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Co ...
- elasticsearch使用More like this实现基于内容的推荐
基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查询文章相似度的接口,叫MoreLikeThis.Elasticsearch封装了该接口,通过Ela ...
- 推荐系统第5周--- 基于内容的推荐,隐语义模型LFM
基于内容的推荐
- 【T-BABY 夜谈大数据】基于内容的推荐算法
这个系列主要也是自己最近在研究大数据方向,所以边研究.开发也边整理相关的资料.网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识. ...
- C# 基于内容电影推荐项目(一)
从今天起,我将制作一个电影推荐项目,在此写下博客,记录每天的成果. 其实,从我发布 C# 爬取猫眼电影数据 这篇博客后, 我就已经开始制作电影推荐项目了,今天写下这篇博客,也是因为项目进度已经完成50 ...
- MapReduce实例-基于内容的推荐(一)
环境: Hadoop1.x,CentOS6.5,三台虚拟机搭建的模拟分布式环境 数据:下载的amazon产品共同采购网络元数据(需FQ下载)http://snap.stanford.edu/data/ ...
- Recommending music on Spotify with deep learning 采用深度学习算法为Spotify做基于内容的音乐推荐
本文参考http://blog.csdn.net/zdy0_2004/article/details/43896015译文以及原文file:///F:/%E6%9C%BA%E5%99%A8%E5%AD ...
随机推荐
- java常见反编译工具
1.Java反编译插件 —— Jadclipse JadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins ...
- 给Spring的placeholder设置默认值
问题:使用Spring时,可以方便地通过placeholder的形式${key}将key对应的properities定义value,注入到Bean中.但是如果在properities文件中,没有对ke ...
- WinPcap权威指南(三):ARP协议
ARP协议在局域网内使用的非常广泛,它的数据包类型分为请求包和答复包.Windows系统内部有一个缓冲区,保存了最近的ARP信息,可以在cmd下使用命令arp -a来显示目前的缓存,或者使用命令arp ...
- [leetcode]Longest Consecutive Sequence @ Python
原题地址:https://oj.leetcode.com/problems/longest-consecutive-sequence/ 题意: Given an unsorted array of i ...
- 用Visual C#来清空回收站(1)
视窗操作系统的回收站是对文件一种保护措施,他主要是作用是不言而喻的.在新的视窗2000系统之中,当我把文件删除到回收站中以后,按动"清空回收站"按钮,想清空回收站,此时往往提示&q ...
- Linux下安装nmap扫描工具
NMAP是一款流行的网络扫描和嗅探工具,被广泛应用在黑客领域做漏洞探测以及安全扫描,更多的nmap是一个好用的网络工具,在生产和开发中也经常用到,主要做端口开放性检测和局域网信息的查看收集等,不同Li ...
- 【Java】SAX解析characters 错误截取问题的解决
SAX解析characters 错误截取问题的解决 SAX characters bug_百度搜索 SAX解析characters 错误截取问题的解决 - CSDN博客 [Android]SAX解析之 ...
- CSS命名规范和规则
一.命名规则 ).尽量不缩写,除非一看就明白的单词 二.class的命名 (1).red { color: red; } .f60 {color: #f60; } .ff8600{ color: #f ...
- scikit-learn的GBDT工具进行特征选取。
http://blog.csdn.net/w5310335/article/details/48972587 使用GBDT选取特征 2015-03-31 本文介绍如何使用scikit-learn的GB ...
- R-向量