mirror of
https://github.com/apachecn/ailearning.git
synced 2026-02-11 14:26:04 +08:00
推荐系统最终优化结果-
This commit is contained in:
@@ -17,6 +17,19 @@
|
||||
|
||||

|
||||
|
||||
## 协同过滤推荐
|
||||
|
||||
* memory-based推荐
|
||||
* Item-based方法
|
||||
* User-based方法
|
||||
* Memory-based推荐方法通过执行最近邻搜索,把每一个Item或者User看成一个向量,计算其他所有Item或者User与它的相似度。有了Item或者User之间的两两相似度之后,就可以进行预测与推荐了。
|
||||
* model-based推荐
|
||||
* Model-based推荐最常见的方法为Matrix factorization.
|
||||
* 矩阵分解通过把原始的评分矩阵R分解为两个矩阵相乘,并且只考虑有评分的值,训练时不考虑missing项的值。R矩阵分解成为U与V两个矩阵后,评分矩阵R中missing的值就可以通过U矩阵中的某列和V矩阵的某行相乘得到
|
||||
* 矩阵分解的目标函数: U矩阵与V矩阵的可以通过梯度下降(gradient descent)算法求得,通过交替更新u与v多次迭代收敛之后可求出U与V。
|
||||
* 矩阵分解背后的核心思想,找到两个矩阵,它们相乘之后得到的那个矩阵的值,与评分矩阵R中有值的位置中的值尽可能接近。这样一来,分解出来的两个矩阵相乘就尽可能还原了评分矩阵R,因为有值的地方,值都相差得尽可能地小,那么missing的值通过这样的方式计算得到,比较符合趋势。
|
||||
* 协同过滤中主要存在如下两个问题:稀疏性与冷启动问题。已有的方案通常会通过引入多个不同的数据源或者辅助信息(Side information)来解决这些问题,用户的Side information可以是用户的基本个人信息、用户画像信息等,而Item的Side information可以是物品的content信息等。
|
||||
|
||||
* * *
|
||||
|
||||
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
|
||||
@@ -27,3 +40,4 @@
|
||||
|
||||
* [推荐系统中常用算法 以及优点缺点对比](http://www.36dsj.com/archives/9519)
|
||||
* [推荐算法的基于知识推荐](https://zhidao.baidu.com/question/2013524494179442228.html)
|
||||
* [推荐系统中基于深度学习的混合协同过滤模型](http://www.iteye.com/news/32100)
|
||||
|
||||
@@ -128,6 +128,7 @@ def recommend(u_index, prediction):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# 基于内存的协同过滤
|
||||
# ...
|
||||
# 拆分数据集
|
||||
@@ -155,6 +156,7 @@ if __name__ == "__main__":
|
||||
u, s, vt = svds(train_data_matrix, k=15)
|
||||
s_diag_matrix = np.diag(s)
|
||||
svd_prediction = np.dot(np.dot(u, s_diag_matrix), vt)
|
||||
print "svd-shape:", np.shape(svd_prediction)
|
||||
print 'Model based CF RMSE: ' + str(rmse(svd_prediction, test_data_matrix))
|
||||
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user