亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

基于隨機梯度下降的矩陣分解推薦算法(python)

2020-02-15 22:52:47
字體:
來源:轉載
供稿:網友

SVD是矩陣分解常用的方法,其原理為:矩陣M可以寫成矩陣A、B與C相乘得到,而B可以與A或者C合并,就變成了兩個元素M1與M2的矩陣相乘可以得到M。

矩陣分解推薦的思想就是基于此,將每個user和item的內在feature構成的矩陣分別表示為M1與M2,則內在feature的乘積得到M;因此我們可以利用已有數據(user對item的打分)通過隨機梯度下降的方法計算出現有user和item最可能的feature對應到的M1與M2(相當于得到每個user和每個item的內在屬性),這樣就可以得到通過feature之間的內積得到user沒有打過分的item的分數。

本文所采用的數據是movielens中的數據,且自行切割成了train和test,但是由于數據量較大,沒有用到全部數據。

代碼如下:

# -*- coding: utf-8 -*-"""Created on Mon Oct 9 19:33:00 2017@author: wjw"""import pandas as pdimport numpy as npimport os def difference(left,right,on): #求兩個dataframe的差集  df = pd.merge(left,right,how='left',on=on) #參數on指的是用于連接的列索引名稱  left_columns = left.columns  col_y = df.columns[-1] # 得到最后一列  df = df[df[col_y].isnull()]#得到boolean的list  df = df.iloc[:,0:left_columns.size]#得到的數據里面還有其他同列名的column  df.columns = left_columns # 重新定義columns  return df  def readfile(filepath): #讀取文件,同時得到訓練集和測試集    pwd = os.getcwd()#返回當前工程的工作目錄  os.chdir(os.path.dirname(filepath))  #os.path.dirname()獲得filepath文件的目錄;chdir()切換到filepath目錄下  initialData = pd.read_csv(os.path.basename(filepath))  #basename()獲取指定目錄的相對路徑  os.chdir(pwd)#回到先前工作目錄下  predData = initialData.iloc[:,0:3] #將最后一列數據去掉  newIndexData = predData.drop_duplicates()  trainData = newIndexData.sample(axis=0,frac = 0.1) #90%的數據作為訓練集  testData = difference(newIndexData,trainData,['userId','movieId']).sample(axis=0,frac=0.1)  return trainData,testData def getmodel(train):  slowRate = 0.99  preRmse = 10000000.0  max_iter = 100  features = 3  lamda = 0.2  gama = 0.01 #隨機梯度下降中加入,防止更新過度  user = pd.DataFrame(train.userId.drop_duplicates(),columns=['userId']).reset_index(drop=True) #把在原來dataFrame中的索引重新設置,drop=True并拋棄   movie = pd.DataFrame(train.movieId.drop_duplicates(),columns=['movieId']).reset_index(drop=True)  userNum = user.count().loc['userId'] #671  movieNum = movie.count().loc['movieId']   userFeatures = np.random.rand(userNum,features) #構造user和movie的特征向量集合  movieFeatures = np.random.rand(movieNum,features)  #假設每個user和每個movie有3個feature  userFeaturesFrame =user.join(pd.DataFrame(userFeatures,columns = ['f1','f2','f3']))  movieFeaturesFrame =movie.join(pd.DataFrame(movieFeatures,columns= ['f1','f2','f3']))  userFeaturesFrame = userFeaturesFrame.set_index('userId')  movieFeaturesFrame = movieFeaturesFrame.set_index('movieId') #重新設置index   for i in range(max_iter):     rmse = 0    n = 0    for index,row in user.iterrows():      uId = row.userId      userFeature = userFeaturesFrame.loc[uId] #得到userFeatureFrame中對應uId的feature       u_m = train[train['userId'] == uId] #找到在train中userId點評過的movieId的data      for index,row in u_m.iterrows():         u_mId = int(row.movieId)        realRating = row.rating        movieFeature = movieFeaturesFrame.loc[u_mId]          eui = realRating-np.dot(userFeature,movieFeature)        rmse += pow(eui,2)        n += 1        userFeaturesFrame.loc[uId] += gama * (eui*movieFeature-lamda*userFeature)         movieFeaturesFrame.loc[u_mId] += gama*(eui*userFeature-lamda*movieFeature)    nowRmse = np.sqrt(rmse*1.0/n)    print('step:%f,rmse:%f'%((i+1),nowRmse))    if nowRmse<preRmse:      preRmse = nowRmse    elif nowRmse<0.5:      break    elif nowRmse-preRmse<=0.001:      break    gama*=slowRate  return userFeaturesFrame,movieFeaturesFrame def evaluate(userFeaturesFrame,movieFeaturesFrame,test):  test['predictRating']='NAN' # 新增一列   for index,row in test.iterrows():         print(index)    userId = row.userId    movieId = row.movieId    if userId not in userFeaturesFrame.index or movieId not in movieFeaturesFrame.index:      continue    userFeature = userFeaturesFrame.loc[userId]    movieFeature = movieFeaturesFrame.loc[movieId]    test.loc[index,'predictRating'] = np.dot(userFeature,movieFeature) #不定位到不能修改值      return test   if __name__ == "__main__":  filepath = r"E:/學習/研究生/推薦系統/ml-latest-small/ratings.csv"  train,test = readfile(filepath)  userFeaturesFrame,movieFeaturesFrame = getmodel(train)  result = evaluate(userFeaturesFrame,movieFeaturesFrame,test)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品久久久久影院优| 大量国产精品视频| 国内精品模特av私拍在线观看| 午夜精品美女自拍福到在线| 国产精品久久91| 国产v综合ⅴ日韩v欧美大片| 亚洲欧美在线第一页| 两个人的视频www国产精品| 精品一区二区三区四区| 精品欧美国产一区二区三区| 国产精品视频1区| 亚洲欧洲日产国码av系列天堂| 中文字幕国产精品| 欧美大片大片在线播放| 国产精品久久久久久久久借妻| 久久艳片www.17c.com| 久久久久久国产精品久久| 国内成人精品一区| 欧美黄色www| 亚洲人成在线播放| 中文字幕欧美日韩va免费视频| 4p变态网欧美系列| 欧美精品在线免费| 亚洲小视频在线观看| 日韩电视剧免费观看网站| 国产成人久久久| 亚洲在线视频福利| 日韩精品视频免费在线观看| 亚洲无av在线中文字幕| 色综合亚洲精品激情狠狠| 亚洲免费精彩视频| 欧美成年人在线观看| 亚洲性视频网站| 国产精品扒开腿做爽爽爽男男| 精品欧美aⅴ在线网站| 国产精品福利在线观看网址| 久久这里有精品视频| 91免费的视频在线播放| 欧美激情免费看| 亚洲精品国产精品自产a区红杏吧| 91久久精品国产91久久| 自拍视频国产精品| 欧美精品在线网站| 久久精品免费播放| 亚洲男人第一网站| 亚洲免费成人av电影| 成人美女免费网站视频| 97精品国产aⅴ7777| 欧美视频13p| 欧美夫妻性生活xx| 国产精品入口免费视| 日韩亚洲精品视频| 日韩在线中文视频| 亚洲精品国精品久久99热| 久久精品久久精品亚洲人| 日本一区二区在线播放| 色老头一区二区三区| 午夜欧美不卡精品aaaaa| www.亚洲免费视频| 欧美一区二区三区图| 国产欧美日韩精品在线观看| 欧美丝袜一区二区三区| 91啪国产在线| 久久97久久97精品免视看| 欧美亚洲国产视频| 欧美激情videoshd| 国产精品福利小视频| 欧美日韩美女在线观看| 精品日本美女福利在线观看| 国产精品视频一区二区三区四| 亚洲图片欧洲图片av| 青草青草久热精品视频在线观看| 亚洲四色影视在线观看| 国产91在线视频| 欧美综合在线第二页| 国产日韩综合一区二区性色av| 精品国产一区二区三区久久久| 国产精品网站大全| 91a在线视频| 欧美一级大片在线观看| 久久久久久久久久久久av| 精品国产美女在线| 国产精品夜间视频香蕉| 欧美另类第一页| 欧美视频在线视频| 国产不卡一区二区在线播放| 日本精品免费一区二区三区| 久久久亚洲天堂| 亚洲日韩中文字幕在线播放| 久久久久久久999精品视频| 日韩一区二区三区在线播放| 国产精品视频网站| 国产精品jvid在线观看蜜臀| 亚州成人av在线| 日韩视频欧美视频| 成人久久久久久久| 国产精品免费视频久久久| 亚洲无限乱码一二三四麻| 国产丝袜一区二区三区| 亚洲国产精彩中文乱码av| 国产福利精品在线| 亚洲第一视频网| 国产一区二区三区三区在线观看| 456亚洲影院| 日本欧美中文字幕| 欧美一级成年大片在线观看| 国内精品中文字幕| 亚洲欧美日韩中文在线| 亚洲日韩欧美视频一区| 91久久久久久久久久| 在线观看国产精品淫| 久久精品国产亚洲精品2020| 亚洲午夜精品久久久久久性色| 国产成人午夜视频网址| 亚洲高清在线观看| 精品无码久久久久久国产| 日韩在线观看精品| 国产成人亚洲精品| 久久琪琪电影院| 国产91色在线|免| 国产欧美一区二区三区在线| 亚洲女人被黑人巨大进入| 按摩亚洲人久久| 日韩黄在线观看| 91在线观看免费高清完整版在线观看| 亚洲欧美自拍一区| 91在线高清免费观看| 亚洲成人激情在线观看| 国产日产欧美精品| 国产欧美一区二区三区久久人妖| 午夜精品一区二区三区在线播放| 久久成人综合视频| 欧美性猛交xxxx富婆弯腰| 成人黄色免费网站在线观看| 一区二区三区日韩在线| 韩国美女主播一区| 亚洲欧洲日韩国产| 在线观看国产精品日韩av| 亚洲国产精品热久久| 亚洲国产精品字幕| 国产女人18毛片水18精品| 92看片淫黄大片欧美看国产片| 91a在线视频| 97免费视频在线播放| 久久青草福利网站| 欧美激情免费观看| 国产亚洲成av人片在线观看桃| 亚洲男人天堂2024| 国产一区二区三区久久精品| 日韩欧美中文在线| 国产日韩换脸av一区在线观看| 中文字幕亚洲精品| 中文字幕欧美精品在线| 亚洲一区二区中文字幕| 91啪国产在线| 亚洲天堂视频在线观看| 国产91精品久久久久久久| 77777少妇光屁股久久一区| 国产成人精品一区二区三区| 91在线观看免费网站| 亚洲视频电影图片偷拍一区| 亚洲国模精品一区| 日韩经典中文字幕| 日本成人黄色片|