受限制玻尔兹曼机(RBM)用于电影推荐小例

原文章:http://blog.csdn.net/u010223750/article/details/61196549

 1 #coding=‘utf-8‘
 2 """
 3 desc: RBM model
 4 author:luchi
 5 date:9/3/17
 6 """
 7 import numpy as np
 8 class RBM_Model(object):
 9
10     def __init__(self,visible_size,hidden_size,lr):
11         self.visible_size = visible_size
12         self.hidden_size = hidden_size
13         self.lr = lr
14         np.random.seed(10)
15         self.b_v = np.random.uniform(-1,1,size=[self.visible_size])*0
16         self.W = np.random.uniform(-1,1,size=[self.visible_size,self.hidden_size])
17         self.b_h = np.random.uniform(-1,1,size=[self.hidden_size])*0
18
19     def sampling(self,data):
20
21         """
22         sampling h_0 using v_0
23         """
24
25         h_0 = self.logist_fun(np.dot(data,self.W)+self.b_h)
26         #print h_0
27         h_shape = np.shape(h_0)
28         #h_0_state = h_0>(np.random.rand(h_shape[0],h_shape[1]))
29         h_0_state = h_0>(np.ones_like(h_0)*0.5)
30
31
32         """
33         building contrastive sampling
34         """
35         v_1 = self.logist_fun(np.dot(h_0_state,np.transpose(self.W))+self.b_v)
36         v_shape = np.shape(v_1)
37         #v_1_state = v_1>(np.random.rand(v_shape[0],v_shape[1]))
38         v_1_state = v_1>(np.ones_like(v_1)*0.5)
39         h_1 = self.logist_fun(np.dot(v_1,self.W)+self.b_h)
40
41         return h_0,v_1,h_1,v_1_state
42
43
44     def train(self,data,iter_time):
45
46         h_0,v_1,h_1,v_1_state = self.sampling(data)
47         if iter_time%100==0:
48             error = np.sum(np.mean((data-v_1) ** 2,axis=0))
49             print("the %i iter_time error is %s" % (iter_time, error))
50
51         """
52         updating weight
53         """
54         updating_matrix = []
55         size = len(data)
56
57         for i in range(size):
58             w_v0= np.reshape(data[i],[self.visible_size,1])
59             w_h0 = np.reshape(h_0[i],[1,self.hidden_size])
60             w_u0 = np.dot(w_v0,w_h0)
61
62             w_v1 = np.reshape(v_1[i],[self.visible_size,1])
63             w_h1 =  np.reshape(h_1[i],[1,self.hidden_size])
64             w_u1 = np.dot(w_v1,w_h1)
65
66             updating_matrix.append(w_u0-w_u1)
67         updating_matrix =  np.mean(np.array(updating_matrix),axis=0)
68         self.W =  self.W + self.lr*updating_matrix
69         self.b_v = self.b_v + self.lr*np.mean((data-v_1),axis=0)
70         self.b_h = self.b_h + self.lr*np.mean((h_0-h_1),axis=0)
71
72     def logist_fun(self,narray):
73         narray =  np.clip(narray,-100,100)
74         return 1.0/(1+np.exp(-1*narray))
75
76     def softmax(self,narray):
77         narray =  np.clip(narray,-100,100)
78         num_a = np.exp(narray)
79         num_b = np.sum(num_a,axis=1)
80         return num_a*1.0/num_b[:,None]
81
82     def recomendation(self,test_data,topK):
83
84         h_0,v_1,h_1 ,_= self.sampling(test_data)
85         sorted_index = np.argsort(-1*v_1,axis=1)
86         return sorted_index[:,:topK]

RBM_Model.py

问题一:

Traceback (most recent call last):
File "E:\eclipse-workspace\RBM_MovieRecomendation-master\RBM_Model.py", line 7, in <module>
import numpy as np
ModuleNotFoundError: No module named ‘numpy‘

分析:NumPy函数库是Python开发环境的一个独立模块,而且大多数Python发行版没有默认安装NumPy数据库,因此在安装Python之后必须单独安装NumPy数据库。

解决:通过pip install numpy可直接安装numpy

时间: 2024-11-10 16:12:09

受限制玻尔兹曼机(RBM)用于电影推荐小例的相关文章

深度学习深入浅出:受限玻尔兹曼机RBM(一)基本概念

技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 最近在复习经典机器学习算法的同时,也仔细看了一些深度学习的典型算法.深度学习是机器学习的"新浪潮",它的成功主要得益于深度"神经网络模型"的优异效果.这个小系列打算深入浅出地记录一下深度学习中常用的一些算法.第一篇先写一下"受限玻尔兹曼机"RBM,会分若干个小段写,这是第一段,关于RBM的基本概念. 网上有很多关于RBM的介绍,但是很多写的比较简略,跳过了很多细节,本文

电影推荐之协同过滤

1.基于内容的推荐 对于基于内容的推荐不多赘述,只说下基本的概念,根据用户已经评分且喜欢(评分高)的电影,为用户推荐和他过去喜欢的电影相似的电影,这里的相似就要依据电影的"内容"来计算了,例如电影的类型等等. 利用到评分预测上,就是对于目标用户A和电影M,从A已经评价过的电影中找到与M相似的电影,利用这些电影的评分来预测用户A对M的评分. 2.协同过滤 协同过滤算法主要分为基于用户的协同过滤算法和基于项目的协同过滤算法. 基于用户的协同过滤通俗的来说呢,就是对于待预测的目标用户A及电影

MongoDB,HDFS, Spark to 电影推荐

http://www.infoq.com/cn/news/2014/12/mongdb-spark-movie-recommend MovieWeb是一个电影相关的网站,它提供的功能包括搜索电影信息.排名或者电影明星资料等.它拥有10000部电影的信息,70000个用户,和超过1千万的电影评分.借用它的搜索目录,用户可以通过类型分类.排名和片名浏览等方式检索电影.但如何解决电影智能推荐的问题呢?近日MongoDB分享了他们结合Hadoop的经验. MovieWeb基于Python.在构建电影推荐

数据挖掘-MovieLens数据集_电影推荐_亲和性分析_Aprioro算法

[python] view plain copy print? #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Feb  7 14:38:33 2017 电影推荐分析: 使用 亲和性分析方法 基于 Apriori算法 推荐电影 @author: yingzhang """ #读取数据集: http://grouplens.org/datasets/movielen

一个php开发的用于路由器的小功能

最近接到一个需求,假设有A.B.C 三台主机.现A主机要访问C主机上的一个脚本,并且根据A传递的参数给C主机,同时接受C主机返回来的数据.但是现在A主机不能直接通过url.IP访问C主机,需要借由主机B.主要思路:A主机请求B主机并发送数据给B主机,B主机把接受到的数据再发送给C主机,同时接受C主机返回的数据,最后再把此数据返回给A主机. 具体程序如下: <?php //绑定的内网的 url 链接 $intranet_url = 'http://localhost/test.php'; //PO

关于某电影推荐算法专利的吐槽

原谅我是一个有个性的90后,吹毛求疵不是我的菜,吐槽才是我真爱. 最近在做电影推荐算法的评分算法总结,虽然去年某度神的社区比赛有涉及到这样一个题目,就是给定用户对电影的评分数据,以及相关的一些用户数据,然后预测用户对其他电影的评分.根据某社区某些天比赛的排名快照来看,排名靠前大神已经能将误差控制在0.6以下了.下图为佐证: 大神毕竟是大神,作为大神,他们在自己的评分模型上不断的修改,不断的进步~然而,看看某专利上的算法,某专利就是用了SVD结合了KNN的算法,申请了专利,结果呢?看看他的误差曲线

零基础小白入门Java免费视频教程推荐—小猿圈

Java语言作为世界上使用最多的开发语言,企业庞大的需求量让每年进入Java开发领域的人不减反增.对于零基础小白来讲如何学习Java开发语言是入门的第一个难题.本文小猿圈主要给零基础小白入门Java开发技术推荐一个靠谱的Java免费视频教程. 零基础小白入门Java免费视频教程推荐-小猿圈 关于Java基础入门视频教程的选择,网上有各种各样的解说,也有各式各样的视频教程,那么我们究竟应该如何选择Java免费视频教程呢?如何才能挑选到合适自己的Java基础入门视频教程呢? 许多想通过观看Java视

使用libcurl下载文件小例

libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP--一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要讲解一个使用curl下载文件的小例. 首先是去下载curl的最新源代码,然后编译成动态库或者静态库:然后把头文件和库文件拿出来加入到我们自己的工程中,引用声明: #include "curl.h" #ifdef _DEBUG #pragma comment(lib, "../De

dwr框架异步调用简单小例

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架.可以轻松实现用js直接调用java方法. 通过一个小例子来演示一个dwr的基本使用: ①. 首先肯定要创建一个web project的,然后拷贝dwr.jar到WEB-INF\lib目录下 ②. 修改web.xml文件,添加dwr servlet配置 <servlet> <servlet-name>dwr-invoker</servlet-name>