日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

自动编码器的评级预测

發布時間:2023/11/28 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动编码器的评级预测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自動編碼器的評級預測

AutoRec: Rating Prediction with Autoencoders

雖然矩陣分解模型在評級預測任務上取得了不錯的效果,但本質上是一個線性模型。因此,這樣的模型不能捕捉復雜的非線性和復雜的關系,這些關系可以預測用戶的偏好。在本文中,介紹了一個非線性神經網絡協同過濾模型AutoRec[Sedhain et al.,2015]。將協同過濾(CF)與自動編碼器架構相結合,并在顯式反饋的基礎上將非線性轉換整合到CF中。神經網絡具有逼近任意連續函數的能力,適合于解決矩陣分解的局限性,豐富了矩陣分解的表達能力。

一方面,AutoRec具有與autocoder相同的結構,由輸入層、隱藏層和重構(輸出)層組成。自動編碼器是一種神經網絡,學習將輸入復制到輸出,以便將輸入編碼到隱藏(通常是低維)表示中。在AutoRec中,不顯式地將用戶/項目嵌入低維空間,而是使用交互矩陣的列/行作為輸入,然后在輸出層重構交互矩陣。

另一方面,AutoRec不同于傳統的自動編碼器:AutoRec專注于學習/重建輸出層,而不是學習隱藏的表示。使用一個部分觀察到的交互矩陣作為輸入,旨在重建一個完整的評級矩陣。同時,在輸出層通過重構將缺失的輸入項填充到輸出層,以達到推薦的目的。

AutoRec有兩種變體:基于用戶的和基于項目的。為了簡潔起見,這里只介紹了基于項目的AutoRec。基于用戶的AutoRec可以相應地導出。

  1. Model

    from d2l import mxnet as d2l

from mxnet import autograd, gluon, np, npx

from mxnet.gluon import nn

import mxnet as mx

import sys

npx.set_np()

  1. Implementing the Model

典型的自動編碼器由編碼器和解碼器組成。編碼器將輸入投影到隱藏表示,解碼器將隱藏層映射到重建層。遵循這一實踐,并創建具有密集層的編碼器和解碼器。編碼器的激活默認設置為sigmoid,解碼器不激活。在編碼轉換后加入了Dropout,以減少過擬合。未觀察到的輸入的梯度被屏蔽,以確保只有觀察到的評級有助于模型學習過程。

class AutoRec(nn.Block):

def __init__(self, num_hidden, num_users, dropout=0.05):super(AutoRec, self).__init__()self.encoder = nn.Dense(num_hidden, activation='sigmoid',use_bias=True)self.decoder = nn.Dense(num_users, use_bias=True)self.dropout = nn.Dropout(dropout)def forward(self, input):hidden = self.dropout(self.encoder(input))pred = self.decoder(hidden)if autograd.is_training():  # mask the gradient during training.return pred * np.sign(input)else:return pred
  1. Reimplementing the Evaluator

由于輸入和輸出都發生了變化,需要重新實現評估函數,而仍然使用RMSE作為精度度量。

def evaluator(network, inter_matrix, test_data, ctx):

scores = []for values in inter_matrix:feat = gluon.utils.split_and_load(values, ctx, even_split=False)scores.extend([network(i).asnumpy() for i in feat])recons = np.array([item for sublist in scores for item in sublist])# Calculate the test RMSE.rmse = np.sqrt(np.sum(np.square(test_data - np.sign(test_data) * recons))/ np.sum(np.sign(test_data)))

return float(rmse)

  1. Training and Evaluating the Model

現在,讓在MovieLens數據集上訓練和評估AutoRec。可以清楚地看到,測試RMSE低于矩陣分解模型,證實了神經網絡在評級預測任務中的有效性。

ctx = d2l.try_all_gpus()

# Load the MovieLens 100K dataset

df, num_users, num_items = d2l.read_data_ml100k()

train_data, test_data = d2l.split_data_ml100k(df, num_users, num_items)

_, _, _, train_inter_mat = d2l.load_data_ml100k(train_data, num_users,

                                            num_items)

_, _, _, test_inter_mat = d2l.load_data_ml100k(test_data, num_users,

                                           num_items)

num_workers = 0 if sys.platform.startswith(“win”) else 4

train_iter = gluon.data.DataLoader(train_inter_mat, shuffle=True,

                               last_batch="rollover", batch_size=256,num_workers=num_workers)

test_iter = gluon.data.DataLoader(np.array(train_inter_mat), shuffle=False,

                              last_batch="keep", batch_size=1024,num_workers=num_workers)

# Model initialization, training, and evaluation

net = AutoRec(500, num_users)

net.initialize(ctx=ctx, force_reinit=True, init=mx.init.Normal(0.01))

lr, num_epochs, wd, optimizer = 0.002, 25, 1e-5, ‘adam’

loss = gluon.loss.L2Loss()

trainer = gluon.Trainer(net.collect_params(), optimizer,

                    {"learning_rate": lr, 'wd': wd})

d2l.train_recsys_rating(net, train_iter, test_iter, loss, trainer, num_epochs,

                    ctx, evaluator, inter_mat=test_inter_mat)

train loss 0.000, test RMSE 0.898

37035493.5 examples/sec on [gpu(0), gpu(1)]


5. Summary

· We can frame the matrix factorization algorithm with autoencoders, while integrating non-linear layers and dropout regularization.

· Experiments on the MovieLens 100K dataset show that AutoRec achieves superior performance than matrix factorization.

總結

以上是生活随笔為你收集整理的自动编码器的评级预测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。