推荐系统—影视评分预测(续)
来源:互联网 发布:淘宝簪子 编辑:程序博客网 时间:2024/04/28 09:02
在上一篇文章推荐系统—影视评分预测中提出了,几点思考:
=============================一、theta/x的意义?=============================
首先是模型:以下的model1/model2都把user想简单了
(1)model1:给定x=(romance,action),回归优化theta。
首先模型就给x赋予了意义(movie类型),那么可以认为theta也跟着有了意义(喜欢romance or action?)
(2)model2:给定theta=(0, 5, 0),回归优化x。
此模型也给theta赋予了意义(喜欢romance or action?),那么x也跟着有了意义(movie类型romance or action?)
model1/model2存在什么样的问题呢?——把user想得too simple
喜欢action类型的电影的user就会对所有action类型的电影打高分么?
读者一定不会是这个审美。同样跟演员/导演等等是相关的。
这个质疑就是在质疑模型(不是指回归模型)建得simple了,当然对问题建模可以从简单到精细,这也是按着科学的思路来的。
复杂的模型可能此时求解有困难(没有找到方案or硬件设施跟不上等问题),转而研究简单的模型。
那么总结model1与model2就是:
给定一个参数(theta or x)用回归模型优化另一个(x or theta),我们赋予给定参数的意义就可以用来解释预测参数。
(3)还有model3:就是协同过滤——同时优化x/theta
这个跟机器学习里面我们学的 “线性回归”就有差别了,
ML里面都是model1/model2似的:给定(y, X) or (y, Theta)
现在给了一个y,就要 x/theta,还是头一次见。
从优化上面来看:J(x,theta)的凸性看不出来,使用Ng的优化得到的是否是全局最优?
这个问题应该是明确的,但是对于《推荐系统》书看得不多(本身优秀的参考书籍也不多),目测应该是全局最优。
此问题待以后深入《推荐系统》时再去解决。
现在假设model3得到了正确的求解,但是x/theta的意义是什么呢? 此处x/theta的维数是由我们来给定的,code中用的是feature=10
我觉得看不出来什么意义?
再或者我们“意义是什么”?为什么一定要有意义,我们是不是被model1/model2带坏了?一定要找个意义?
那么仅仅从“为了回归y”的目的上来考虑,可以没有“意义”;
没有意义,我们对未评分的预测算是什么呢?—没有model1/model2的模型解释,model3的预测就显得没有道理(意义。。。)。
写到这想到 杨绛给一个年轻人的回信:“读书太少,想得太多”。
这些问题先不深究,待读读书/看看paper来了解目前对此的研究情况。
=============================二、是否对x-feature添加分量1==============================
我是想做个数值实验来着,code做的是协同过滤,x/theta都是未知的随机变量了。那么也就无法对x-feature添加分量1了。
后来做了行均值化,那么对于model1:给定x=(romance,action),回归优化theta,就有点意思了。
。。。一个结论记错了,刚查了下,木有意思了。
所以问题可以是更一般些了:在机器学习中“线性回归”为什么要对x-feature添加分量1?——我查清楚放到评论里。
=============================三、x-feature的意义=============================
这个在<一>中已经论及,这里再整理下:
- model1/model2的模型对某一参数赋予了意义(不一定是romance/action,还可以是其他),另一参数也就有了意义。
- model3找不出什么意义来。
=============================四、词语意义=============================
"基于内容的推荐":
看过《集体智慧编程》,此书第二章:提供推荐,也是在讲推荐系统。其中提到“基于用户过滤”和“基于物品过滤”,跟这个名字很相似,但是套路好像真不一样。待查。
"协同过滤":
看到这个我想到的是——啤酒和尿布,这个好像跟这里的回归模型差别很多,啤酒尿布那块用贝叶斯来搞的,待查。
=============================五、协同过滤code=============================
%% Machine Learning Online Classclear,clc%% Part 1: Entering ratings for a new usermovieList = loadMovieList();my_ratings = zeros(1682, 1);my_ratings(1) = 4;my_ratings(98) = 2;my_ratings(7) = 3;my_ratings(12)= 5;my_ratings(54) = 4;my_ratings(64)= 5;my_ratings(66)= 3;my_ratings(69) = 5;my_ratings(183) = 4;my_ratings(226) = 5;my_ratings(355)= 5;fprintf('\n\nNew user ratings:\n');for i = 1:length(my_ratings) if my_ratings(i) > 0 fprintf('Rated %d for %s\n', my_ratings(i), ... movieList{i}); endend%% Part 2: Learning Movie Ratings% Now, you will train the collaborative filtering model on a movie rating % dataset of 1682 movies and 943 users%fprintf('\nTraining collaborative filtering...\n');% Load dataload('ex8_movies.mat');%可见评分比例比较小fprintf('------用户评分百分比:%f-------\n',sum(R(:))/numel(R))% Add our own ratings to the data matrixY = [my_ratings Y];R = [(my_ratings ~= 0) R];% Normalize Ratings[Ynorm, Ymean] = normalizeRatings(Y, R);% Useful Valuesnum_users = size(Y, 2);num_movies = size(Y, 1);num_features = 10;% Set Initial Parameters (Theta, X)X = randn(num_movies, num_features);Theta = randn(num_users, num_features);initial_parameters = [X(:); Theta(:)];% Set options for fmincgoptions = optimset('GradObj', 'on', 'MaxIter', 200);% Set Regularizationlambda = 10;%优化部分 计算X Theta使costFunction最小%原代码 此处有误: 需将Y 改为Ynormtheta = fmincg (@(t)(cofiCostFunc(t, Ynorm, R, num_users, num_movies, ... num_features, lambda)), ... initial_parameters, options);% Unfold the returned theta back into U and WX = reshape(theta(1:num_movies*num_features), num_movies, num_features);Theta = reshape(theta(num_movies*num_features+1:end), ... num_users, num_features);fprintf('Recommender system learning completed.\n');%% Part 3: Recommendation for you % After training the model, you can now make recommendations by computing% the predictions matrix.p = X * Theta';my_predictions = p(:,1) + Ymean;movieList = loadMovieList();[r, ix] = sort(my_predictions, 'descend');%此处代码有点小误,既然是推荐,那么user评过分的movie应该过滤掉,%以下代码木有过滤fprintf('\nTop recommendations for you:\n');for i=1:10 j = ix(i); fprintf('Predicting rating %.1f for movie %s\n', my_predictions(j), ... movieList{j});endfprintf('\n\nOriginal ratings provided:\n');%此处简单修改了下,增加了对比fprintf('----------Movie------------------初始化评分----------预测评分-------\n')for i = 1:length(my_ratings) if my_ratings(i) > 0 fprintf('%-36s %d %4.3d\n', movieList{i}, my_ratings(i), my_predictions(i)) endend
输出:
Part 1: Entering ratings for a new user
Part 2: Learning Movie Ratings
Part 3: Recommendation for you
- 推荐系统—影视评分预测(续)
- 推荐系统—影视评分预测
- Netflix推荐系统:从评分预测到消费者法则
- Netflix推荐系统:从评分预测到消费者法则
- Netflix推荐系统:从评分预测到消费者法则
- 推荐系统实践--第七章:推荐系统实例 第八章:评分预测问题
- 最近邻居推荐系统原理和基于用户的评分预测推荐
- 社会化推荐系统中用重叠社区正则化进行评分预测
- 机器学习:个性化推荐之评分预测问题
- Rating Prediction——评分预测小结
- Rating Prediction——评分预测小结
- 推荐系统评分矩阵稀疏性计算
- 影视推荐及不推荐
- 【寻找最佳小程序】01期:影视评分小工具“豆瓣评分”——产品设计要点及专家评析
- 电影评分预测
- [影视推荐]黑客题材美剧—网络末日战
- 我是如何为技术博客设计一个推荐系统(上):统计与评分加权
- soledede--User-based Rating Prediction(基于用户的评分预测推荐)
- LED字符设备驱动调试笔记
- 行走在镜面的边缘
- TS包得数据结构
- 存在
- 狗的好朋友-西泽米兰
- 推荐系统—影视评分预测(续)
- TS 流解码过程:
- TS流概述
- android 数据库开发中java.lang.IllegalStateException: get field slot from row 0 col -1 failed 异常错误
- 音频、视频、图片格式
- TS包头解析
- Combobox通过输入框所输入内容的改变实现模糊查询
- Java集合类中TreeMap的应用
- C++ STL