1.推荐算法概述
推荐算法出现得很早,最早的推荐系统是卡耐基·梅隆大学推出的Web Watcher浏览器导航系统,可以根据当的搜索目标和用户信息,突出显示对用户有用的超链接。斯坦福大学则推出了个性化推荐系统LIRA.AT&T实验室于1997年提出基于协作过滤的个性化推荐系统,通过了解用户的喜好和需求,能更精确地呈现相关内容。
在Facebook自2006年开始引领互联网社交新潮流之后,推荐系统真正与互联网产品相结合。加之亚马逊、淘宝等主营电商的互联网产品改变了网民的社交生活方式,推荐算法在社交、电商等产品中被运用得风生水起。
根据亚马逊网站的数据统计,在已购买的网站用户中,原本就有明确购买意向的仅占6%。如果商家能够把满足客户模糊需求的商品主动推荐给客户,就有可能将客户的潜在需求转化为实际购买需求。因此,根据用户的兴趣、爱好、购买行为等特征进行商品推荐的推荐系统应运而生,并被广泛使用。
目前,大型电子商务网站(如Amazon、淘宝)、音乐播放软件(如网易云音乐、虾米音乐)以及大型视频网站等都有内置的推荐系统。在购物网站上,当用户浏览或购买了某些物品后,经常会弹出新的物品供选择。如图7.2所示,一位客户刚在Amazon上浏览了乐高积木,马上看到系统推荐给他相关产品。顾客在淘宝网站收藏了一张实木书桌,平台会推荐一系列相关的设备。为什么电子商务平台那么了解你?你总是很容易看到感兴趣的新闻,听到符合自己风格的音乐呢?
这背后就是推荐系统平台在工作。推荐系统首先收集、处理客户的数据,通过分析客户的特征,为客户推荐最合适的商品。
推荐系统的核心工作是使用特定的信息分析技术,将项目推荐给可能感兴趣的用户。了解用户的兴趣爱好是推荐系统最重要的一个环节。如何把用户的行为进行量化,得到每个用户的特征偏好,也是一个难题。各商业模式下,用户偏好都是一个比较复杂的指我不同的企业有自己统计用户偏好的方法,计算也各不相同。
2.问题描述
小明经常到一家店去吃麻辣香锅,如图7.6所示。最近,这家店的老板开发了一个菜品推荐程序。老板先整理出店里各种菜的口味特点,如脆的、甜的、辣的等记
推荐他可能喜欢的其他菜品。 录到数据文件中,在小明点菜时,程序分析小明的历史评价得知小明喜欢的菜品,许据此推荐他可能喜欢的其他菜谱
3.问题分析
推荐算法使用的是各个菜品的口味特征(taste),为文本类型。可以考虑构建 taste特征的tidf矩阵,对文本信息向量化处理。然后使用距离度量方法,计算相似度,进行推荐。
4.python代码实现
import pandas as pd
from numpy import *
from sklearn.feature_extraction.text import TfidfVectorizer
#1.读取数据
print('Stepl: read data...')
food=pd.read_csv('hot-spicy pot.csv')
food.head(10)
#2.将菜品的描述构造成TF-IDF向量 print('Step2:make TD-IDF...')
tfidf=TfidfVectorizer(stop_words='english')
tfidf_matrix=tfidf.fit_transform(food['taste'])
tfidf_matrix.shape
#3.计算两个菜品的余弦相似度
print('Step3:compute similarity...')
from sklearn.metrics.pairwise import pairwise_distances
cosine_sim=pairwise_distances(tfidf_matrix,metric="cosine")
#推荐函数,输出与其最相似的10个菜品
def content_based_recommendation (name,consine_sim=cosine_sim):idx=indices[name]sim_scores=list(enumerate(cosine_sim[idx]))sim_scores=sorted(sim_scores,key=lambda x:x[1]) sim_scores=sim_scores[1:11]food_indices=[i[0] for i in sim_scores]return food['name'].iloc[food_indices]
#4.根据菜名及特点进行推荐
print('step4:recommend by name...')
#5.建立索引,方便使用菜名进行数据访问
indices=pd.Series(food.index, index=food['name']).drop_duplicates()
result=content_based_recommendation("celery")
result
运行结果
可以看出,对于小明评分较高的“芹菜”,系统能够推荐出相似度较高的菜品。