程序示例–推荐系统

推荐模型

在推荐模型中,我们将暴露:

  • 训练接口 train()
  • 预测接口 predict(Theta, X)
  • 获得推荐接口 getTopRecommends(Theta, X, i, count, rated, items):

并且,使用 scipy.optimize.minimize 来最小化代价函数:

# coding: utf8
# recommender_system/recommender.py
import numpy as np
from scipy.optimize import minimize, check_grad
from pydash import py_def getRecommender(Y, R, params=None, n=10, theLambda=10, maxIter=100):"""训练方法Args:Y 评价矩阵R 是否评价矩阵params 是否具有初始化参数n 商品特征数theLambda 正规化参数maxIter 最大迭代次数Returns:train 训练方法predict 预测方法"""# 商品数,用户数nm, nu = Y.shape# normalize YMeanmu = np.mean(Y, axis=0)mu = np.zeros((Y.shape[0], 1), dtype=np.float)for i in range(nm):totalRates = np.sum(Y[i])validCount = len(np.nonzero(R[i])[0])mu[i] = totalRates / validCountY = Y - mudef unroll(Theta, X):"""参数折叠Args:Theta 用户偏好矩阵X 商品内容矩阵Returns:vector 折叠后的参数"""return np.hstack((X.A.T.flatten(), Theta.A.T.flatten()))def roll(vector):"""参数回复Args:vector 参数向量Returns:Theta 用户偏好矩阵X 商品内容矩阵"""X = np.mat(vector[:nm * n].reshape(n, nm).T)Theta = np.mat(vector[nm * n:].reshape(n, nu).T)return Theta, Xdef initParams():"""初始化参数Returns:Theta 用户对内容的偏好矩阵X 商品内容矩阵"""Theta = np.mat(np.random.rand(nu, n))X = np.mat(np.random.rand(nm, n))return Theta, Xdef regParams(param):"""正规化参数Args:param 参数Return:regParam 正规化后的参数"""return theLambda * 0.5 * np.sum(np.power(param, 2))def J(params):"""代价函数Args:params 参数向量nu 用户数nm 商品数n 特征数Return:J 预测代价"""# 参数展开Theta, X = roll(params)# 计算误差rows, cols = np.nonzero(R)# 预测H = predict(Theta, X)Diff = H - YDiff[R != 1] = 0error = 0.5 * np.sum(np.power(Diff, 2))#  正规化 ThetaregTheta = regParams(Theta)#  正规化 xregX = regParams(X)return error + regTheta + regXdef gradient(params):"""梯度下降Args:params 参数向量Returns:grad 梯度向量"""Theta, X = roll(params)ThetaGrad = np.mat(np.zeros(Theta.shape))XGrad = np.mat(np.zeros(X.shape))error = predict(Theta, X) - Yerror[R != 1] = 0ThetaGrad = error.T * X + theLambda * ThetaXGrad =  error * Theta + theLambda * Xreturn unroll(ThetaGrad, XGrad)def train():"""训练方法Returns:Theta 用户的偏好矩阵X 商品的内容矩阵"""# 初始化参数if not params:Theta, X = initParams()else:Theta = params['Theta']X = params['X']# 最小化目标函数res = minimize(J, x0=unroll(Theta, X), jac=gradient,method='CG', options={'disp': True, 'maxiter': maxIter})Theta, X = roll(res.x)return Theta, Xdef predict(Theta, X):"""预测Args:Theta 用户对内容的偏好矩阵X 商品内容矩阵Return:h 预测"""return X * Theta.T + mudef getTopRecommends(Theta, X, i, count, rated, items):"""获得推荐Args:Theta ThetaX Xi 用户下标count 获得推荐的数目rated 已经评价的类目iditems 商品清单Returns:topRecommends 推荐项目"""predictions = predict(Theta, X)[:, i]return py_(items) \.map(lambda item, idx: (item, predictions[idx])) \.sort_by(lambda item: item[1], reverse = True) \.take(count) \.value()return train, predict, getTopRecommends

测试

我们选取了一份电影打分数据,来训练推荐系统。并且,我们新建了一个用户,并且评价了一些电影:

New user ratings:
Rated 4 for Toy Story (1995)
Rated 3 for Twelve Monkeys (1995)
Rated 5 for Usual Suspects, The (1995)
Rated 4 for Outbreak (1995)
Rated 5 for Shawshank Redemption, The (1994)
Rated 3 for While You Were Sleeping (1995)
Rated 5 for Forrest Gump (1994)
Rated 2 for Silence of the Lambs, The (1991)
Rated 4 for Alien (1979)
Rated 5 for Die Hard 2 (1990)
Rated 5 for Sphere (1998)

系统的训练结果如下:

Traing Result:
Warning: Maximum number of iterations has been exceeded.Current function value: 71102.253824Iterations: 100Function evaluations: 156Gradient evaluations: 156

系统向新用户推荐的内容为:

Top recommendations for you:
Predicting rating 4.5 for movie Great Day in Harlem, A (1994)
Predicting rating 4.1 for movie Someone Else's America (1995)
Predicting rating 3.9 for movie Aiqing wansui (1994)
Predicting rating 3.7 for movie Entertaining Angels: The Dorothy Day Story (1996)
Predicting rating 3.7 for movie Marlene Dietrich: Shadow and Light (1996)
Predicting rating 3.5 for movie They Made Me a Criminal (1939)
Predicting rating 3.5 for movie Santa with Muscles (1996)
Predicting rating 3.5 for movie Tokyo Fist (1995)
Predicting rating 3.4 for movie Star Kid (1997)
Predicting rating 3.3 for movie Window to Paris (1994)

9.5 程序示例--推荐系统-机器学习笔记-斯坦福吴恩达教授相关推荐

  1. 3.11 程序示例--逻辑运算-机器学习笔记-斯坦福吴恩达教授

    程序示例–逻辑运算 我们使用感知器神经网络来描述逻辑AND运算: 代码: # coding: utf-8 # neural_network/test_logic_and.py "" ...

  2. 1.7 程序示例--多项式回归-机器学习笔记-斯坦福吴恩达教授

    程序示例–多项式回归 下面,我们有一组温度(temperature)和实验产出量(yield)训练样本,该数据由博客 Polynomial Regression Examples 所提供: tempe ...

  3. 9.1 基于内容的推荐系统-机器学习笔记-斯坦福吴恩达教授

    基于内容的推荐系统 推荐系统是机器学习最重要的应用之一,你所知道的淘宝.亚马逊.facebook.豆瓣这些网站都把推荐系统作为了核心.在某个电影资讯的网站,有那么一份用户对于电影的打分(1 - 5 分 ...

  4. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授

    机器学习系统设计–垃圾邮件分类 假定我们现有一封邮件,其内容如下: From: cheapsales@buystufffromme.com To: ang@cs.stanford.edu Subjec ...

  5. 5.7 程序示例--基于 SMO 的 SVM 模型-机器学习笔记-斯坦福吴恩达教授

    程序示例–基于 SMO 的 SVM 模型 在这里,我们会实现一个基于 SMO 的 SVM 模型,在其中,提供了简化版 SMO 和 完整版 SMO 的实现. 简化版 SMO:不使用启发式方法选择 (α( ...

  6. 8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授

    程序示例–异常检测 异常检测模型 提供了一般高斯分布模型和多元高斯分布模型.其中,多元高斯分布模型被限制到了同轴分布: # coding: utf8 # anomaly_detection/anoma ...

  7. 7.5 程序示例--PCA for 数据可视化-机器学习笔记-斯坦福吴恩达教授

    程序示例–PCA for 数据可视化 我们有一张小鸟的图片,这是一个三通道彩色图像: 我们将图片的像素按颜色进行聚类,并在三维空间观察聚类成果: 似乎在三维空间可视化不是那么直观,借助于PCA,我们将 ...

  8. 7.4 程序示例--PCA for 加速学习-机器学习笔记-斯坦福吴恩达教授

    程序示例–PCA for 加速学习 现在,我们手上有一个人脸数据集,每张图片大小为 32×32 ,以像素为特征,则每个特征向量的维度就为 1024 维: 考虑使用 PCA 进行降低特征维度到 100 ...

  9. 7.3 程序示例--PCA 模型-机器学习笔记-斯坦福吴恩达教授

    程序示例–PCA 模型 # coding: utf8 # pca/pca.pyimport numpy as npdef normalize(X):"""数据标准化处理A ...

最新文章

  1. Apache运行机制剖析
  2. 互动场景下的低延迟编码技术
  3. Hive元数据信息表详解
  4. ARC107——C - Shuffle Permutation
  5. 常见的排序算法二——希尔排序
  6. GIS人眼中的“云GIS”
  7. 系统目录 linux命令,linux基础命令之系统目录(示例代码)
  8. AB=C型向量分解思路思考
  9. autofs后 卸载_autofs自动挂载
  10. 偏标记(partial)学习
  11. 多目标狼群优化算法(MGWO)
  12. python输入一个三位数输出百位十位个位_“任意输入一个三位数,输出这个三位数的百位、十位和个位,并且计算十位百位个位的和。”c语言程序...
  13. win7如何设置通电自动开机_老司机处理win7系统电脑自动开机设置的详细步骤【图文】...
  14. [人工智能-深度学习-46]:FineTuning(微调)、Transfer Trainning(迁移学习)的理论基础与深度解析
  15. Unity3D 文字线条效果
  16. mysql8对系统的要求_linux-mysql8的安装步骤详解及需要注意的坑
  17. 我的自选股估值观察:家电+银行+地产+白酒
  18. JavaSpring全面总结
  19. SCANDY让你的手机变成扫描仪
  20. 谷歌验证码recaptcha接入

热门文章

  1. JS实现ul,li排序效果
  2. JavaScript采用append添加的元素错误
  3. JavaWeb学习之Path总结、ServletContext、ServletResponse、ServletRequest(3)
  4. 关于TxQBService报的错,腾讯你真牛B啊
  5. AUTOCAD自学教程一
  6. SQLite的事务和锁
  7. F(n)完全覆盖中的计数问题
  8. 在继承中派生类成员的访问权限测试
  9. C++class默认生成4个函数
  10. 贝叶斯统计:Tweedie公式及其证明