基于内容的推荐 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 ...
随机推荐
- 自定义的圆形ProgressBar
之前已经详细讲解过自定义控件的使用方式了.这里我单独把定以好的控件列出来. 之前定义的各式各样的ProgressBar http://www.cnblogs.com/tianzhijiexia ...
- Java常用工具类之ArrayUtil
过滤 ArrayUtil.filter方法用于编辑已有数组元素,只针对泛型数组操作,原始类型数组并未提供. 方法中Editor接口用于返回每个元素编辑后的值,返回null此元素将被抛弃. 例如:过滤数 ...
- [Web 前端] ECMAScript5之StrictMode
cp from : https://www.cnblogs.com/giggle/p/5252185.html ECMAScript5引入一个严格模式的概念(Strict Mode). 它的作用就是不 ...
- [Android Pro] 开发一流Android SDK
cp from : https://blog.csdn.net/dd864140130/article/details/53558011 本篇文章已授权微信公众号 guolin_blog (郭霖)独家 ...
- HTML5实现简单圆周运动示例
一.使用JS实现圆周运动 根据指定圆心.半径,在定时器中移动固定的弧度,重绘圆圈的位置 源代码: <!DOCTYPE html> <html lang="en"& ...
- 用make编译openCV报错:ts_gtest.cpp:(.text._ZN7testing8internal2RED2Ev+0xf): undefined reference to 'regfreeA'
解决方案: the cause is the google tests is looking for the generic regex.h but cmake used the regex.h fr ...
- Installing Hyperledger Fabric v1.1 on Ubuntu 16.04 — Part I
There is an entire library of Blockchain APIs which you can select according to the needs that suffi ...
- 使用Log4j将程序日志实时写入Kafka(转)
原文链接:使用Log4j将程序日志实时写入Kafka 很多应用程序使用Log4j记录日志,如何使用Kafka实时的收集与存储这些Log4j产生的日志呢?一种方案是使用其他组件(比如Flume,或者自己 ...
- [填坑]解决"Your MaintenanceTool appears to be older than 3.0.2. ."问题
之前我写过QT5.9版本在更新组件时出现“要继续此操作,至少需要一个有效且已启用的储存库”问题,得到了网友的热心转载,说明遇到此问题的人不在少数. 原文地址:https://blog.csdn.net ...
- Ubuntu sh命令无法正确执行 (修改默认sh为bash)
新安装的ubuntu,执行shell命令,都怀疑自己的shell水平了. 原来, ubuntu默认的是dash, 需要手动执行命令将dash改为bash. 命令: sudo dpkg-reconfig ...