首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >创建MLP模型来预测用户使用PyTorch给未看过的电影的评分

创建MLP模型来预测用户使用PyTorch给未看过的电影的评分
EN

Stack Overflow用户
提问于 2020-07-10 09:02:57
回答 1查看 440关注 0票数 0

在我的项目中,我试图根据用户给其他电影的评分来预测用户对一部看不见的电影的评分。我使用的是movielens dataset.The主文件夹,它是ml-100k,包含关于100,000 的信息。

在对数据进行处理之前,主要数据(分级数据)包含用户ID、电影ID、用户评等(从0到5,以及该项目考虑的).I,然后使用sklearn库将数据拆分为培训集(80%)和测试数据(20%)。

为了创建推荐系统,正在使用模型‘Stacked-Autoencoder’。我使用的是PyTorch,代码是在Google 上实现的。这个项目是基于这个https://towardsdatascience.com/stacked-auto-encoder-as-a-recommendation-system-for-movie-rating-prediction-33842386338

我刚开始深造,我想把这个模型(Stacked_Autoencoder)和另一个深度学习模式进行比较。例如,我想使用多层感知(MLP)。这是为了研究目的。这是下面的代码,用于创建堆叠-自动编码器模型和训练模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### Part 1 : Archirecture of the AutoEncoder 

#nn.Module is a parent class 
# SAE is a child class of the parent class nn.Module
class SAE(nn.Module): 
# self is the object of the SAE class 

# Archirecture 
    def __init__(self, ): 
    # self can use alll the methods of the class nn.Module
        super(SAE,self).__init__()
    # Full connected layer  n°1, input and 20 neurons-nodes of the first layer
    # one neuron can be the genre of the movie
    
    # Encode step 
        self.fc1 = nn.Linear(nb_movies,20)
    # Full connected layer n°2 
        self.fc2 = nn.Linear(20,10)
    
    # Decode step 
    # Full connected layer n°3
        self.fc3 = nn.Linear(10,20) 
    # Full connected layer n°4
        self.fc4 = nn.Linear(20,nb_movies) 
    # Sigmoid activation function 
        self.activation = nn.Sigmoid()

# Action : activation of the neurons
def forward(self, x) : 
        x = self.activation(self.fc1(x))
        x = self.activation(self.fc2(x))
        x = self.activation(self.fc3(x))
        # dont's use the activation function 
        # use the linear function only 
        x = self.fc4(x)
        # x is th evector of predicted ratings
        return x 

# Create the AutoEncoder object 
sae=SAE()
#MSE Loss : imported from torch.nn 
criterion=nn.MSELoss() 
# RMSProp optimizer (update the weights) imported from torch.optim 
#sea.parameters() are weights and bias adjusted during the training
optimizer=optim.RMSProp(sae.parameters(),lr=0.01, weight_decay=0.5)

### Part 2 : Training of the SAE 
# number of epochs 
nb_epochs = 200 
# Epoch forloop 
for epoch in range(1, nb_epoch+1): 
        # at the beginning the loss is at zero
        s=0.
        train_loss = 0 

        #Users forloop 
        for id_user in range(nb_users)
            # add one dimension to make a two dimension vector.
            # create a new dimension and put it the first position .unsqueeze[0]
            input = Variable(training_set[id_user].unsqueeze[0])
            
            # clone the input to obtain the target  
            target= input.clone()
            
            # target.data are all the ratings 
            # ratings > 0
            if torch.sum(target.data >0) > 0
                output = sae(input)
                # don't compute the gradients regarding the target
                target.require_grad=False 
                # only deal with true ratings 
                output[target==0]=0
                
                # Loss Criterion 
                loss =criterion(output,target)
                
                # Average the error of the movies that don't have zero ratings
                mean_corrector=nb_movies/float(torch.sum(target.data>0)+1e-10)
                
                # Direction of the backpropagation 
                loss.backward()
                train_loss+=np.sqrt(loss.data[0]*mean_corrector)
                s+=1.
                
                # Intensity of the backpropagation 
                optimizer.step()
        
    print('epoch:' +str (epoch)+'loss:' +str(train_loss/s)

)

如果我想用MLP模型训练的话。如何实现这个类模型?另外,我还可以使用什么其他深度学习模型(除了MLP)来与堆叠式自动编码器进行比较呢?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-25 14:40:30

MLP不适合于建议。如果您想走这个路线,您将需要为您的userid创建一个嵌入,为您的itemid创建另一个嵌入,然后在嵌入的基础上添加线性层。您的目标将是预测用户to itemid对的评级。

我建议你看看变分自动编码器(VAE)。他们给出了最先进的推荐系统。他们也将提供一个公平的比较,您的堆叠-自动编码器。以下是将VAE应用于协同过滤的研究论文:https://arxiv.org/pdf/1802.05814.pdf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62839095

复制
相关文章
【说站】mysql内连接是什么
1、内部连接类似于自然连接,但内部连接不要求比较两个表的同名属性列,可以用on或using指定两个表比较的字段。
很酷的站长
2022/11/23
6320
【说站】mysql内连接是什么
【说站】mysql自连接查询是什么
1、自连接查询是特殊的多表连接查询,因为两个相关查询的表是同一个表,通过取别名虚拟成两个表然后连接。
很酷的站长
2022/11/24
8180
【说站】mysql自连接查询是什么
经典面试题-数据连接池的工作机制是什么
J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
cwl_java
2019/11/29
6960
【说站】mysql左外连接查询是什么
1、以join左表为主表,显示主表的所有数据,并根据条件查询连接右表的数据。如果满足条件,则显示;如果不满足,则显示为null。
很酷的站长
2022/11/24
1.2K0
【说站】mysql左外连接查询是什么
mysql的左右连接_MySQL之左连接与右连接
on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一张普通表看]
全栈程序员站长
2022/10/05
12.9K0
DevOps平台中的制品库是什么?有什么用处?
在DevOps实践中,制品库可以说是至关重要的组件。一个可靠的制品库在DevOps流程中往往可以帮助企业解决许多安全和版本管控方面的问题。
嘉为蓝鲸
2022/08/03
1.7K0
DevOps平台中的制品库是什么?有什么用处?
【MySQL】MySQL 的 SSL 连接以及连接信息查看
在上篇文章中,我们学习过 MySQL 的两种连接方式,回忆一下,使用 -h 会走 TCP 连接,不使用 -h 可以使用另两种方式来走 UnixSocket 连接。我们就接着这个话题再聊点别的,首先要纠正一下之前讲的,-h 不一定全是走 TCP 连接。然后我们顺着这个话题,再看一下 MySQL 中如何指定使用安全连接的问题。在学习这两个问题中,我们还将接触到一个查看当前连接状态的命令。
硬核项目经理
2024/03/18
5000
【MySQL】MySQL 的 SSL 连接以及连接信息查看
Elasticsearch的工作原理是什么?
Elasticsearch是一种流行的分布式搜索引擎,可用于处理大量数据。它使用Lucene搜索引擎库作为其核心组件,可以高效地进行复杂的全文搜索、结构化搜索和分析操作。本文将详细介绍Elasticsearch的工作原理。
网络技术联盟站
2023/06/06
4900
Elasticsearch的工作原理是什么?
天线的工作原理是什么
天线的工作原理主要基于电磁波的辐射和接收。当天线被放置在电磁波的场中时,天线上的电子会受到电磁波的激励而产生振动。这种振动会产生感应电流,从而在天线上产生一个电压。这个电压可以被进一步处理并转换为电子设备可以使用的电信号。
用户11339509
2024/12/09
1070
mysql的连接查询
首先创建两张表,一个student_table,一个salary。表名起的不是合乎情景,就这样吧。
兰舟千帆
2022/07/16
1K0
mysql的连接查询
mysql左连接 右连接 内连接的区别[通俗易懂]
a表 id name b表 id job parent_id
全栈程序员站长
2022/09/05
2.6K0
mysql连接的使用
创建两个表student,和score即学生表和成绩表。 student表的字段有id,name,class,number score表中的字段有number,chinese,math,english 创建表
逍遥子大表哥
2021/12/17
1.8K0
mysql连接的使用
MySQL的连接命令
该函数有 6 个参数,在成功链接到 MySQL 后返回连接标识,失败返回 FALSE 。
菲宇
2022/12/02
1.8K0
MySQL的JDBC连接
JDBC 是 Java Database Connective的缩写,表示使用Java去连接数据库进行数据操作的过程
全栈程序员站长
2022/09/09
3.3K0
Mysql中外连接,内连接,左连接,右连接的区别
可能第一种通过where语句查询,大家都能理解. 但是不知道大家有没有去尝试过理解下面关于内连接与外连接查询方式的区别 ,接下来我们先通过一张图来演示一下连接的整个层级关系:
萌萌哒的瓤瓤
2021/01/13
4.5K0
Mysql中外连接,内连接,左连接,右连接的区别
mysql左连接和右连接_MYSQL 左连接与右连接
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
全栈程序员站长
2022/09/05
16K0
mysql左连接和右连接_MYSQL 左连接与右连接
连接 MySQL
命令选项 -A(–no-auto-rehash)的作用是禁止数据库名、表名和字段名自动补全。如果数据库数据表很多,当我们打开数据库时,比如使用 use 切换数据库时,需要对数据表进行预处理以满足自动补全的功能,将会很耗时。使用 -A 可禁止该操作。
恋喵大鲤鱼
2023/10/12
2400
MySQL 连接
您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。
用户1685462
2021/07/16
10.4K0
MySQL 连接
您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。
用户1168904
2021/08/03
9.3K0
MySQL 连接
您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库。
用户6884826
2021/07/07
9.4K0

相似问题

MySQL工作台中的调试模式

20

mySQL工作台中生成的列

10

MySQL工作台中的存储过程支持?

10

mysql工作台中更改存储过程或模式面板的快捷键是什么?

10

如何让性能统计在MySQL工作台中工作?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文