推荐系统中的冷启动问题推荐系统中的主要问题之一是最初可用的评价数量相对较小 。当新用户还没有给电影打分,或者一部新的电影被添加到系统中时,我们该怎么做呢?在这种情况下,应用传统的协同过滤模型会更加困难 。尽管基于内容和基于知识的推荐算法在面临冷启动问题时比协同过滤更具有鲁棒性,但基于内容和基于知识并不总是可用的 。因此,一些新方法,比如混合系统,已经被设计出用来解决这个问题了 。
混合推荐系统文章到目前为止所介绍的不同类型的推荐系统都各有优劣,他们根据不同的数据给出推荐 。一些推荐系统,如基于知识的推荐系统,在数据量有限的冷启动环境下最为有效 。其他系统,如协同过滤,在有大量数据可用时则更加有效 。在多数情况下,数据都是多样化的,我们可以为同一任务灵活采用多种方法 。因此,我们可以结合多种不同技术的推荐来提高整个系统的推荐质量 。许多的组合性技术已经被探索出来了,包括:
- 加权:为推荐系统中的每种算法都赋予不同的权重,使得推荐偏向某种算法
- 交叉:将所有的推荐结果集合在一起展现,没有偏重
- 增强:一个系统的推荐将作为下一个系统的输入,循环直至最后一个系统为止
- 切换:随机选择一种推荐方法
推荐系统与AI?推荐系统常用于人工智能领域 。推荐系统的能力 – 洞察力,预测事件的能力和突出关联的能力常被用于人工智能中 。另一方面,机器学习技术常被用于实现推荐系统 。例如,在Arcbees,我们使用了神经网络和来自IMdB的数据成功建立了一个电影评分预测系统 。神经网络可以快速地执行复杂的任务并轻松地处理大量数据 。通过使用电影列表作为神经网络的输入,并将神经网络的输出与用户评分进行比较,神经网络可以自我学习规则以预测特定用户的未来评分 。
专家建议在我读过许多资料中,我注意到有两个很重要的建议经常被推荐系统领域内的专家提及 。第一,基于用户付费的物品进行推荐 。当一个用户有购买意愿时,你就可以断定他的评价一定是更具有相关性与准确的 。第二,使用多种算法总是比改进一种算法要好 。Netflix Prize竞赛就是一个很好的例子 。
实现一个基于物品的推荐系统下面的代码演示了实现一个基于物品的推荐系统是多么的简单与快速 。所使用的语言是Python,并使用了Pandas与Numpy这两个在推荐系统领域中最流行的库 。所使用的数据是电影评分,数据集来自MovieLens 。
第一步:寻找相似的电影1.读取数据
import pandas as pd2.构造用户的电影矩阵
import numpy as np
ratings_cols = ['user_id', 'movie_id', 'rating']
ratings = pd.read_csv('u.data', sep='t', names=ratings_cols, usecols=range(3))
movies_cols = ['movie_id', 'title']
movies = pd.read_csv('u.item', sep='|', names=movies_cols, usecols=range(2))
ratings = pd.merge(ratings, movies)
movieRatings = ratings.pivot_table(index=['user_id'],columns=['title'],values='rating')3.选择一部电影并生成这部电影与其他所有电影的相似度
starWarsRatings = movieRatings['Star Wars (1977)']4.去除不流行的电影以避免生成不合适的推荐
similarMovies = movieRatings.corrwith(starWarsRatings)
similarMovies = similarMovies.dropna()
df = pd.DataFrame(similarMovies)
ratingsCount = 100【你不知道的今日头条推荐系统】5.提取与目标电影相类似的流行电影
movieStats = ratings.groupby('title').agg({'rating': [np.size, np.mean]})
popularMovies = movieStats['rating']['size'] >= ratingsCount
movieStats[popularMovies].sort_values([('rating', 'mean')], ascending=False)[:15]
df = movieStats[popularMovies].join(pd.DataFrame(similarMovies, columns=['similarity']))
df.sort_values(['similarity'], ascending=False)[:15]
推荐阅读
- C++面向对象开发的四大特性:封装、抽象、继承、多态
- 五分钟教你搞定wifi断网问题,从此wifi问题不求人
- A2DP连接在安卓系统中的实现
- Type-C大势已成定局!雷电4和USB4都在用,但你真的分得清吗?
- 自己养乌龟需要注意些什么 养乌龟需要什么
- 厚鼻角龙的图片 厚鼻龙图片
- 月球月震的能量大约相当于地球的 月亮特别亮预兆地震
- 变色龙都会变什么颜色 变色龙的皮肤
- 中国航天员实现首次出舱 我国第一位出舱活动的航天员是
- 绿毛龟的毛可以拔掉吗 乌龟长绿毛怎么清除
