推荐系统入门学习(打卡)

B站直播

  • 推荐教材:《深度学习推荐系统》

  • 学习偏向落地的推荐系统(推荐系统的组成 & 工具)

任务1:推荐系统基础

1. 推荐系统与常见的结构化问题的区别是什么?

        不同于常见结构化问题,推荐系统是根据海量数据,按照特定框架,从待推荐品中经过多层逻辑筛选出最终推荐品给用户. 这其中蕴含许多不确定性,主要区别可分为以下几个方面:

  • 涉及数据较多,原始数据可大概分为用户数据和内容数据两类,详细来看其涉及面更广泛,而结构化问题通常为一行一个样本,仅针对样本特征与其label间的复杂关系;

  • 评估较复杂,结构化问题通常是一个指定的样本理论上确定最优解,但推荐系统只能尽量择优;

  • 链路复杂,召回、过滤、粗排、精排、强规则,从候选集到得到最终推荐结果,推荐链路较长较复杂;

2. 如何评价推荐系统「推荐」的准不准?

        推荐系统评估指标可大概分为硬指标和软指标两类,硬指标指的是一些用户层面的数据,如点击率、用户停留时长、用户付费金额、用户留存率等,软指标指的是内用层面的数据,如推荐覆盖度、基尼指数等,此外,还有其他评价指标,如用户满意度、推荐内容多样性、实时性、稳健性等.

3. 推荐系统一般分为召回 & 排序,为什么这样划分?

        不同于其他问题,推荐系统是连接用户和内容的桥梁,如果直接排序后推荐,则需要计算每个用户对每个内容的喜好程度,计算量过大. 另一方面,绝大多数用户只对十分少的内容感兴趣,而计算用户对所有内容的喜好度也就浪费了很大的计算量. 通过在链路中添加召回,可以在排序前先对内容进行选择,将每个用户待筛选推荐池显著减小,这样可以保证推荐质量的同时降低计算量.

任务2:Movienles介绍

  • 下载并读取Movielens 1M数据集(用户、电影、评分)

        下载链接:MovieLens 1M Dataset | GroupLens

  • 统计如下指标:

    • 总共包含多少用户?

    • 总共包含多个电影?

    • 平均每个用户对多少个电影进行了评分?

    • 每部电影 & 每个用户的平均评分是?

import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] =  False
​
def getRatings(file_path):
    rates = pd.read_csv(
        file_path,
        header = None,
        sep = '::',
        names = ['userID', 'movieID', 'rate', 'timestamp'],
        engine='python',
    )
    print('=' * 100)
    print(rates.head())
    print('=' * 100)
    print('样本容量:{}, 用户数:{}, 电影数:{}'.format(
                        rates['userID'].count(),
                        rates['userID'].groupby(rates['userID']).count().count(),
                        rates['movieID'].groupby(rates['movieID']).count().count(),
                        ))
    print('=' * 100)
    print('每个用户平均对{}个电影进行评分'.format(round(rates['userID'].groupby(rates['userID']).count().mean(),3)))
    print('=' * 100)
    print('每个电影平均分:\n{}'.format(rates['rate'].groupby(rates['movieID']).mean()))
    print('=' * 100)
    print('每个用户平均分:\n{}'.format(rates['rate'].groupby(rates['userID']).mean()))
    print('=' * 100)
    return
    
if __name__ == '__main__':
    getRatings('ml-1m/ratings.dat')
    
    
############################################## 输出结果##############################################
====================================================================================================
   userID  movieID  rate  timestamp
0       1     1193     5  978300760
1       1      661     3  978302109
2       1      914     3  978301968
3       1     3408     4  978300275
4       1     2355     5  978824291
====================================================================================================
样本容量:1000209, 用户数:6040, 电影数:3706
====================================================================================================
每个用户平均对165.598个电影进行评分
====================================================================================================
每个电影平均分:
movieID
1       4.146846
2       3.201141
3       3.016736
4       2.729412
5       3.006757
          ...   
3948    3.635731
3949    4.115132
3950    3.666667
3951    3.900000
3952    3.780928
Name: rate, Length: 3706, dtype: float64
====================================================================================================
每个用户平均分:
userID
1       4.188679
2       3.713178
3       3.901961
4       4.190476
5       3.146465
          ...   
6036    3.302928
6037    3.717822
6038    3.800000
6039    3.878049
6040    3.577713
Name: rate, Length: 6040, dtype: float64
============================
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值