基于内容的推荐算法(Content-Based)

基于内容的推荐算法(Content-Based)

简介

基于内容的推荐方法是非常直接的,它以物品的内容描述信息为依据来做出的推荐,本质上是基于对物品和用户自身的特征或属性的直接分析和计算。

内容推荐算法是指在网站或应用中向用户推荐内容的一种机器学习算法。这些算法通过分析用户的历史浏览记录、搜索关键词、偏好设置等来推荐相关的内容。这些算法可以帮助用户发现更多感兴趣的内容,同时也能帮助网站或应用提高用户的参与度和留存率。

常见的内容推荐算法包括基于协同过滤的算法、基于内容的算法、基于标签的算法等。

基于协同过滤的算法是一种基于用户-物品交互数据的推荐方法。这种算法通过分析用户的浏览记录来学习用户的兴趣偏好,然后向用户推荐与他们兴趣相似的内容。

基于内容的推荐算法是一种基于内容特征的推荐方法。这种算法通过对内容的文本、图像、视频等进行分析,来推荐与当前内容相似的内容。

基于标签的推荐算法是一种基于标签的推荐方法。这种算法通过分析用户打上的标签来推荐与这些标签相关的内容。

例如,假设已知电影A是一部喜剧,而恰巧我们得知某个用户喜欢看喜剧电影,那么我们基于这样的已知信息,就可以将电影A推荐给该用户。

基于内容的推荐实现步骤
  • 画像构建。顾名思义,画像就是刻画物品或用户的特征。本质上就是给用户或物品贴标签。

    • 物品画像:例如给电影《战狼2》贴标签,可以有哪些?

在这里插入图片描述

"动作"、"吴京"、"吴刚"、"张翰"、"大陆电影"、"国产"、"爱国"、"军事"等等一系列标签是不是都可以贴上
  • 用户画像:例如已知用户的观影历史是:“《战狼1》”、“《战狼2》”、“《建党伟业》”、“《建军大业》”、“《建国大业》”、“《红海行动》”、"《速度与激情1-8》"等,我们是不是就可以分析出该用户的一些兴趣特征如:“爱国”、“战争”、“赛车”、“动作”、“军事”、“吴京”、"韩三平"等标签。
问题:物品的标签来自哪儿?
  1. PGC 物品画像–冷启动
    • 物品自带的属性(物品一产生就具备的):如电影的标题、导演、演员、类型等等
    • 服务提供方设定的属性(服务提供方为物品附加的属性):如短视频话题、微博话题(平台拟定)
    • 其他渠道:如爬虫
  2. UGC 冷启动问题
    • 用户在享受服务过程中提供的物品的属性:如用户评论内容,微博话题(用户拟定)

根据PGC内容构建的物品画像的可以解决物品的冷启动问题

基于内容推荐的算法流程:
  • 根据PGC/UGC内容构建物品画像
  • 根据用户行为记录生成用户画像
  • 根据用户画像从物品中寻找最匹配的TOP-N物品进行推荐
物品冷启动处理:
  • 根据PGC内容构建物品画像
  • 利用物品画像计算物品间两两相似情况
  • 为每个物品产生TOP-N最相似的物品进行相关推荐:如与该商品相似的商品有哪些?与该文章相似文章有哪些?

N最相似的物品进行相关推荐:如与该商品相似的商品有哪些?与该文章相似文章有哪些?

代码实例:

# coding: utf-8 -*-
 
"""
    Author: Alan
    Desc:
         编写一个基于内容推荐算法的电影推荐系统(训练模型)
"""
import json
import pandas as pd
import numpy as np
import math
import random
 
class CBRecommend:
    # 加载dataProcessing.py中预处理的数据
    def __init__(self,K):
        # 给用户推荐的item个数
        self.K = K
        self.item_profile=json.load(open("data/item_profile.json","r"))
        self.user_profile=json.load(open("data/user_profile.json","r"))
 
    # 获取用户未进行评分的item列表
    def get_none_score_item(self,user):
        items=pd.read_csv("data/movies.csv")["MovieID"].values
        data = pd.read_csv("data/ratings.csv")
        have_score_items=data[data["UserID"]==user]["MovieID"].values
        none_score_items=set(items)-set(have_score_items)
        return none_score_items
 
    # 获取用户对item的喜好程度(余弦相似度)
    def cosUI(self,user,item):
        Uia=sum(
            np.array(self.user_profile[str(user)])
            *
            np.array(self.item_profile[str(item)])
        )
        Ua=math.sqrt( sum( [ math.pow(one,2) for one in self.user_profile[str(user)]] ) )
        Ia=math.sqrt( sum( [ math.pow(one,2) for one in self.item_profile[str(item)]] ) )
        return  Uia / (Ua * Ia)
 
    # 为用户进行电影推荐
    def recommend(self,user):
        user_result={}
        item_list=self.get_none_score_item(user)
        for item in item_list:
            user_result[item]=self.cosUI(user,item)
        if self.K is None:
            result = sorted(
                user_result.items(), key= lambda k:k[1], reverse=True
            )
        else:
            result = sorted(
                user_result.items(), key= lambda k:k[1], reverse=True
            )[:self.K]
        print(result)
 
    # 推荐系统效果评估
    def evaluate(self):
        evas=[]
        data = pd.read_csv("data/ratings.csv")
        # 随机选取20个用户进行效果评估
        for user in random.sample([one for one in range(1,6040)], 20):
            have_score_items=data[data["UserID"] == user]["MovieID"].values
            items=pd.read_csv("data/movies.csv")["MovieID"].values
 
            user_result={}
            for item in items:
                user_result[item]=self.cosUI(user,item)
            results = sorted(
                user_result.items(), key=lambda k: k[1], reverse=True
            )[:len(have_score_items)]
            rec_items=[]
            for one in results:
                rec_items.append(one[0])
            eva = len(set(rec_items) & set(have_score_items)) / len(have_score_items)
            evas.append( eva )
        return sum(evas) / len(evas)
 
 
if __name__=="__main__":
    cb=CBRecommend(K=10)
    cb.recommend(1)
    print(cb.evaluate())
  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于内容推荐旅游算法是一种个性化推荐系统的应用。在Python中,可以使用不同的方法实现这个算法,下面我将介绍一种基本的实现方式。 首先,我们需要收集用户的偏好信息和旅游内容的特征。用户的偏好信息可以包括用户的性别、年龄、地理位置、过去的旅游经历等等。而旅游内容的特征可以包括地理位置、旅游景点的类型、价格等等。 接下来,我们需要计算用户和旅游内容之间的相似度。可以使用不同的计算方法,例如余弦相似度、欧氏距离等等。通过计算相似度,我们可以得到用户与每个旅游内容的匹配程度。 然后,根据用户的偏好信息和旅游内容的特征,我们可以为用户生成候选的旅游推荐列表。可以使用规则或者机器学习模型来生成这个列表。例如,可以根据用户的地理位置和旅游景点的地理位置,筛选出离用户比较近的旅游景点作为候选。 最后,我们可以根据用户的反馈来优化推荐结果。用户可以对旅游推荐结果进行评分、点击、购买等行为,我们可以基于这些反馈信息来优化算法。 总而言之,基于内容推荐旅游算法可以帮助用户发现符合其偏好的旅游内容。在Python中,我们可以使用不同的方法实现这个算法,并根据用户的反馈进行优化。这种个性化推荐系统可以提高用户的满意度,帮助用户更好地选择旅游目的地。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Echo-Niu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值