初步了解推荐

1.基于内容的推荐

比如新闻推荐,是基于新闻之间的cos相似度,然后根据用户的浏览记录,推荐相似度最高的几条新闻。

# 1. 数据收集  
news_data = pd.read_csv('news_data.csv')  
  
# 2. 数据清洗和处理  
news_data.drop_duplicates(subset='title', inplace=True)  # 去除重复新闻  
news_data.dropna(subset=['content'], inplace=True)  # 去除缺失内容的新闻  
news_data['content'] = news_data['content'].apply(lambda x: x.lower())  # 将新闻内容转为小写  
  
# 3. 特征提取  
vectorizer = TfidfVectorizer(stop_words='english')  
news_features = vectorizer.fit_transform(news_data['content'])  
  
# 4. 相似度计算  
similarity_matrix = cosine_similarity(news_features)  
  
# 5. 用户建模  
user_history = ["China's economy grows by 6.9% in Q2"]  # 用户历史浏览记录  
user_features = vectorizer.transform(user_history)  
  
# 6. 推荐算法  
user_similarities = cosine_similarity(user_features, news_features)  
top_similar_indexes = user_similarities.argsort()[0][-5:]  # 取相似度最高的5条新闻  

2. 协同过滤

与基于内容的推荐,二者的差异

协同过滤和基于内容的推荐是两种常见的推荐算法,它们有一些差异:

  1. 数据使用方式:协同过滤算法基于用户行为数据,如用户的历史浏览记录、评分记录等,来寻找具有相似兴趣的用户或物品。而基于内容的推荐算法则是基于物品的属性特征,如新闻的内容、标签等,来寻找具有相似属性的物品。

  2. 推荐目标:协同过滤算法的目标是找到具有相似兴趣的用户或物品,从而在用户之间传递推荐信息。而基于内容的推荐算法的目标是找到具有相似属性特征的物品,从而推荐给用户具有相似属性的物品。

  3. 数据稀疏性处理:协同过滤算法在处理数据稀疏性方面相对较好,因为它可以利用大量的用户行为数据进行推荐。而基于内容的推荐算法在数据稀疏性方面相对较差,因为它依赖于物品的属性特征,如果物品的属性特征缺失或不足够丰富,可能会导致推荐结果不准确。

  4. 新物品推荐:协同过滤算法可以更容易地处理新物品推荐的问题,因为它可以利用其他用户对相似物品的行为数据来进行推荐。而基于内容的推荐算法在新物品推荐方面相对较困难,因为新物品可能没有足够的属性特征与其他物品进行比较。

综上所述,协同过滤算法更注重利用用户行为数据来进行推荐,适用于数据稀疏和新物品推荐的场景;而基于内容的推荐算法更注重利用物品的属性特征来进行推荐,适用于物品属性丰富和数据稳定的场景。在实际应用中,可以根据具体的推荐需求和数据情况选择合适的算法。

这个是一个比较简单的例子,通过评分的相似性,找出一个人未评分但是相似用户高度评分的电影

import pandas as pd  
from sklearn.metrics.pairwise import cosine_similarity  
  
# 1. 数据收集  
ratings_data = pd.read_csv('ratings_data.csv')  
  
# 2. 用户相似度计算  
user_similarity = cosine_similarity(ratings_data)  
  
# 3. 推荐算法  
def user_based_recommendation(user_id, top_n):  
    # 找到与目标用户最相似的用户  
    similar_users = user_similarity[user_id-1].argsort()[::-1][1:]  
  
    # 获取目标用户未评分的电影  
    unrated_movies = ratings_data.loc[user_id-1][ratings_data.loc[user_id-1].isnull()]  
  
    # 针对每个相似用户,找到他们评分最高的电影  
    recommendations = []  
    for user in similar_users:  
        rated_movies = ratings_data.loc[user][ratings_data.loc[user].notnull()]  
        top_rated_movie = rated_movies.sort_values(ascending=False).index[0]  
        recommendations.append(top_rated_movie)  
  
    # 去除已经评分过的电影,保留top_n个推荐电影  
    recommendations = list(set(recommendations) - set(unrated_movies.index))[:top_n]  
  
    return recommendations  
  
# 4. 输出推荐结果  
user_id = 1  
top_n = 5  
recommendations = user_based_recommendation(user_id, top_n)  
print(f"为用户{user_id}推荐的电影:")  
for movie_id in recommendations:  
    movie_title = movie_data.loc[movie_id]['title']  
    print(f"电影ID:{movie_id},电影标题:{movie_title}")

协同过滤主要分为两种类型:基于用户的协同过滤和基于物品的协同过滤。

  1. 基于用户的协同过滤(User-Based Collaborative Filtering):
    • 原理:基于用户的协同过滤算法基于用户之间的相似性来进行推荐。它首先计算用户之间的相似度,然后根据相似用户的历史行为或兴趣,为目标用户推荐相似用户喜欢的物品。
    • 过程:首先,计算用户之间的相似度,常用的相似度度量方法包括余弦相似度、皮尔逊相关系数等。然后,选择与目标用户相似度最高的K个用户,根据这些用户的历史行为或兴趣,预测目标用户对未知物品的喜好程度,最后将可能感兴趣的物品推荐给目标用户。
    • 优点:简单易懂,适用于用户数量较多的情况。
    • 缺点:计算用户之间的相似度需要耗费较大的计算资源,且在用户数量庞大的情况下,推荐效果可能会下降。
  2. 基于物品的协同过滤(Item-Based Collaborative Filtering):
    • 原理:基于物品的协同过滤算法基于物品之间的相似性来进行推荐。它首先计算物品之间的相似度,然后根据目标用户对已知物品的评分或行为,为用户推荐与其喜欢的物品相似的其他物品。
    • 过程:首先,计算物品之间的相似度,常用的相似度度量方法同样包括余弦相似度、皮尔逊相关系数等。然后,根据目标用户对已知物品的评分或行为,选择与已知物品相似度最高的K个物品,将这些物品推荐给目标用户。
    • 优点:计算物品之间的相似度相对于用户之间的相似度计算更加高效,适用于物品数量较多的情况。此外,基于物品的协同过滤算法还具有较好的稳定性和可扩展性。
    • 缺点:无法解释推荐结果中的原因,对于新用户或冷启动问题,推荐效果可能会较差。

两种类型的协同过滤算法各有优劣,根据具体的应用场景和数据特点,可以选择适合的算法来进行推荐。在实际应用中,也可以结合两种算法的优点,进行混合推荐。

3.粗排与精排

在推荐系统中,粗排(Recall)和精排(Precision)是两个重要的环节,旨在提高推荐的覆盖率和准确性。以下是粗排和精排的一般做法:

  1. 粗排(Recall):粗排的目标是尽可能覆盖用户的潜在兴趣,以确保没有漏掉任何可能感兴趣的物品。在粗排阶段,通常会使用一些快速而高效的方法,例如基于用户的协同过滤、基于内容的推荐等。这些方法可以快速生成一些备选物品列表,以满足覆盖率的要求。

  2. 精排(Precision):精排的目标是从粗排生成的备选物品列表中,筛选出最符合用户兴趣的物品,以提高推荐的准确性。在精排阶段,通常会使用更复杂的算法和技术,例如深度学习模型、排序算法等。这些方法会考虑更多的特征和因素,例如用户行为、物品特征、上下文信息等,以精确地预测用户对物品的喜好,并进行排序。

在实践中,粗排和精排可以通过以下方式进行:

  1. 粗排阶段:
    • 使用基于用户的协同过滤、基于内容的推荐等方法,快速生成备选物品列表。
    • 考虑引入多样性推荐,以确保推荐结果的多样性。
    • 使用召回率等指标来评估粗排结果的覆盖率。
  2. 精排阶段:
    • 使用更复杂的算法和模型,例如深度学习模型、排序算法等,对备选物品进行精确的排序。
    • 考虑引入个性化排序、上下文感知等技术,以进一步提高推荐的准确性。
    • 使用准确率、点击率、转化率等指标来评估精排结果的质量。

需要根据具体的场景和数据特点来选择和调整粗排和精排的方法。在实际应用中,通常需要进行多次迭代和优化,以逐步提升推荐系统的效果。

要在精排阶段提高用户点击推荐功能的效果,可以考虑以下几个方法:

  1. 特征工程:在精排阶段,提取更多的特征,包括用户行为特征(如点击、购买、评分等)、物品特征(如类别、标签、描述等)、上下文特征(如时间、地理位置等)等。这些特征可以帮助模型更好地理解用户兴趣和物品的相关性。

  2. 深度学习模型:使用深度学习模型进行推荐排序,例如基于神经网络的排序模型(如DNN、Wide & Deep、Ranking SVM等)。这些模型可以利用更多的输入特征和复杂的非线性关系,提高推荐的准确性。

  3. 上下文感知:考虑用户的上下文信息,如时间、地理位置、设备类型等,将其作为推荐模型的输入特征。这可以帮助模型更好地理解用户的需求和行为习惯,提供更加个性化的推荐。

  4. 点击率优化:使用点击率优化算法,例如基于多臂老虎机(Multi-Armed Bandit)的算法,动态调整推荐结果的排序,以最大化用户点击率。这种算法可以根据实时的反馈和用户行为进行学习和优化。

  5. A/B测试:进行A/B测试来评估不同精排算法和策略的效果。通过将用户随机分成不同的组,分别使用不同的精排方法,然后比较各组的点击率和转化率等指标,找出效果最好的算法和策略。

  6. 增加推荐多样性:在精排阶段,除了考虑用户点击率外,还可以考虑推荐结果的多样性。通过引入多样性推荐算法,可以提供更丰富和多样化的推荐结果,从而吸引更多用户点击。

需要注意的是,精排方法的选择和调整需要根据具体场景和数据特点来进行,因此在实践中可能需要进行多次迭代和优化,才能达到最好的效果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值