推荐系统

推荐系统原理

可以将推荐系统表示成如下矩阵:
在这里插入图片描述
行,表示用户
列,表示物品
数值表示,当前用户对物品的打分,?表示用户与物品无交互

目标:预测?处的评分,然后排序,推荐评分较高的物品给用户

推荐系统:
一.应用最广泛的 协 同 过 滤 协同过滤 推荐
1.基于 用 户 用户 的协同过滤推荐
2.基于 物 品 物品 的协同过滤推荐
3.隐语义模型
二.基于内容的 推荐
三.混合推荐

基于用户 协同过滤推荐

  1. 计算用户之间的相似度,用户画像(总结用户的特征+打标签–>向量化),训练相似度
  2. 获取与目标用户相似度较高的用户
  3. 将他们交互的物品中评分较高的(目标用户未交互的)推荐给该目标用户

计算用户相似度:

  1. 欧式距离 1 1 + d \frac{1}{1+d} 1+d1
    2.余弦距离 cos ⁡ ( θ ) = A B ∣ ∣ A ∣ ∣ ∗ ∣ ∣ B ∣ ∣ \cos(\theta) = \frac {A B}{||A||*||B||} cos(θ)=ABAB
    3.相关系数
    c o r r = c o v ( x , y ) D ( x ) ∗ D ( y ) corr = \frac {cov(x,y)}{\sqrt {D(x)}*\sqrt{D(y)}} corr=D(x) D(y) cov(x,y)
    协 方 差 c o v ( x , y ) = E ( [ x − E ( x ) ] ∗ [ y − E ( y ) ] ) 协方差 cov(x,y) = E([x-E(x)]*[y-E(y)]) cov(x,y)=E([xE(x)][yE(y)])

简单案例分析

小数据集的电影推荐
提取码:cm7y

"""
    小数据量的 电影推荐
    基于用户的协同过滤  推荐
"""
import numpy as np
import pandas as pd

def load_data(filename):
    
    df = pd.read_json(filename)
    
    return df

if __name__=="__main__":
    
    #load data
    #row movies
    #col users
    df = load_data("ratings.json")
    #preview data
    print(df.head())
    print("\n")
    
    #recommend for cur user
    cur_user = "Michael Henry"
    
    #calc similarity user matrix
    similar_mat = df.corr()
    print("similarity user matrix:\n")
    print(similar_mat)
    
    #select positive correlation for cur user
    sim_to_cur_user = similar_mat[cur_user].drop(cur_user)
    sim_to_cur_user = sim_to_cur_user[sim_to_cur_user>0]
    print(sim_to_cur_user)
    print("\n")
    
    #store movies
    rec_movies = {}
    #travel similar user ,check relative movies
    for similar_user,similar_score in sim_to_cur_user.items():
        
        #check movies scored by similar_user,but not by cur user
        temp = df.filter([similar_user,cur_user])
        movies = temp[temp[similar_user].notnull()&temp[cur_user].isnull()]
        print(movies)
        
        #another method
        #travel per movie, filter not viewed by cur user
        
        #deal movies that will recommend for cur user
        temp = movies[similar_user]
        for m,score in temp.items():
            if m not in rec_movies:  #store in dict
                rec_movies[m] = [[],[]]
            rec_movies[m][0].append(score) #movie score
            rec_movies[m][1].append(similar_score) #weight ,namely user similarity    
    
    print("\n")        
    print("当前推荐电影:\n")
    print(rec_movies)
    print("\n")
    
    #sorted rec_movies
    sorted_rec_movies = sorted(rec_movies.items(),key=lambda x:np.average(x[1][0],weights=x[1][1]),reverse=True)
    print("排序的推荐电影:",sorted_rec_movies)
    
    print("仅推荐电影:",[i[0] for i in sorted_rec_movies])
        

基于物品 协同过滤推荐

  1. 计算物品之间的相似度(需要预计算,即训练,然后保存,调用)
  2. 获取与目标用户交互的(评分高)物品中相似度较高的物品
  3. 将推荐评分高的物品推荐给目标用户

可以使用上例的数据,实现基于物品的推荐

部署推荐系统

推 荐 系 统 模 型 推荐系统模型 封装成后端服务----> 提供一个API

在这里插入图片描述

电影推荐系统案例

整体案例讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值