常用的推荐算法no.1
1.0基于人口统计学的推荐与用户画像
2.0基于内容的推荐与特征工程
3.0基于协同过滤的推荐
1.0基于人口统计学的推荐与用户画像
根据用户特质找到他的邻居;用户基本的信息;
用户A是名女性,年龄介于2025岁,偏好物品A;用户B是名男性,年龄介于4045岁,偏好物品B、物品C;用户C是名女性,年龄介于 20~25岁;我们已为每位用户建立了profile(用户画像),现在我们要给用户C进行推荐。基于profile和合适的距离度量计算用户的相似度, 我们发现用户A与用户C最相似,可将用户A偏好的物品A推荐给用户C。
用户画像
用户画像(User Profile)就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式; 用户信息不好收集,所以有时候可能不准确;可收集他的行为数据;
用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息
作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础.
2. 0基于内容的推荐
直接匹配、训练模型–特征值
Content-based Recommendations (CB) 根据推荐物品或内容的元数据,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。
通过抽取物品内在或者外在的特征值,实现相似度计算。 ===>> 比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。
将用户(user)个人信息的特征(基于喜好记录或是预设兴趣标签),和物品(item)的特征相匹配,就能得到用户对物品感兴趣的程度;
在一些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC)
相似度计算 – 推荐系统中用的距离 –
相似度的评判,可以用距离表示,而一般更常用的是“余弦相似度”
欧式距离:差向量的模长;
余弦相似度
对于物品的特征提取 —— 打标签(tag)
专家标签(PGC)
用户自定义标签(UGC)
降维分析数据,提取隐语义标签(LFM)
对于文本信息的特征提取 —— 关键词
分词、语义处理和情感分析(NLP)
潜在语义分析(LSA)
基于内容推荐系统的高层次结构
特征工程 – 模型之前所要做的 – 最后得到的特征输出给模型(机器学习算法)
一开始拿到的数据 ===> 目标–想要得到的;
特征:作为判断条件的一组输入变量,是做出判断的依据
目标:判断和预测的目标,模型的输出变量,是特征所产生的结果
特征 (feature):数据中抽取出来的对结果预测有用的信息。
特征的个数就是数据的观测维度
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
特征工程一般包括特征清洗(采样、清洗异常样本),特征处理(标准化、归一化等)和特征选择(先提前考量下把不必要的砍掉,两个方面的考量:①数据是否发散—方差、相关系数)
特征按照不同的数据类型分类,有不同的特征处理方法
数值型–连续的
类别型 – 离散的
时间型 – 如用户登陆时间等
统计型
数值型特征处理:
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要的做法是 归一化 和 离散化
① 幅度调整/ 归一化 – 让取值不会受到幅度的影响
特征与特征之间应该是平等的,区别应该体现在特征内部;
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在3000000 ~ 15000000(万)之间,而住房面积在40~300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
归一化
离散化 : 连续值 ----> 变成分类问题
将原始连续值切断,转化为离散值:
让座问题:假设我们要训练一个模型判断在公交车上应不应该给一个人让座,按照常理,应该是给年龄很大和年龄很小的人让座
对于以上让座问题中的年龄特征,对于一些模型,假设模型为 y = θx,输入的 x(年龄)对于最后的贡献是正/负相关的,即 x 越大越应该让座,但很明显让座问题中,年龄和是否让座不是严格的正相关或者负相关,这样只能兼顾年龄大的人,无法兼顾年龄大的人和年龄小的人
对于让座问题,我们可以使用阈值将年龄进行分段,将一个 age 特征分为多个特征,将连续值离散化:
在电商中,每个人对于价格的喜好程度不同,但它不一定是严格的正相关或负相关,某些人可能就喜欢某一价格段内的商品
离散化的两种方式:
等步长 —— 简单但不一定有效
等频(更精准,但易变动) —— min —> 25% --> 75% —> max
两种方法对比
等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用,而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能使用
等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用
类别型特征处理 – 特征展开处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间
One-Hot 编码/哑变量
One-Hot 编码/哑变量所做的就是将类别型数据 平行地展开,也就是说,经过 One-Hot 编码/哑变量后,这个特征的空间会膨胀
3.0基于协同过滤的推荐
协同过滤(Collaborative Filtering,CF)-- 用户和物品之间关联的用户行为数据
①基于近邻的协同过滤
基于用户(User-CF) --用户画像
基于物品(Item-CF) – 基于内容-特征工程
②基于模型的协同过滤
奇异值分解(SVD)
潜在语义分析(LSA)
支撑向量机(SVM)
协同过滤CF – 用户行为数据
基于内容(Content based,CB)(物品的信息拿不到基于内容就无法做了)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容
CF 可以解决 CB 的一些局限 (用户评价可得出物品的好坏,但CF无法做出冷启动,基于大量数据)
物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐
CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干扰
CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系)
分为两类:基于近邻和基于模型
①. 基于近邻的推荐
基于近邻(基于用户之间的关联)的推荐系统根据的是相同“口碑”准则
是否应该给Cary推荐《泰坦尼克号》?
基于用户的协同过滤(User-CF) 用户的行为数据
基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品
在一般的应用中是采用计算“K- 近邻”的算法;基于这 K 个邻居的历史偏好信息,为当前用户进行推荐
User-CF 和基于人口统计学的推荐机制
两者都是计算用户的相似度,并基于相似的“邻居”用户群计算推荐
它们所不同的是如何计算用户的相似度:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好
基于物品的协同过滤(Item-CF)
基于项目的协同过滤推荐的基本原理与基于用户的类似,只是使用所有用户对物品的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户
Item-CF 和基于内容(CB)的推荐
其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息
同样是协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?
电商、电影、音乐网站,用户数量远大于物品数量
新闻网站,物品(新闻文本)数量可能大于用户数量
User-CF 和 Item-CF 的比较
同样是协同过滤,在 User-CF 和 Item-CF 两个策略中应该如何选择呢?
Item-CF 应用场景 – 用户行为数据 – 主流
基于物品的协同过滤(Item-CF)推荐机制是 Amazon 在基于用户的机制上改良的一种策略。因为在大部分的 Web 站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于物品的机制比基于用户的实时性更好一些,所以 Item-CF 成为了目前推荐策略的主流
User-CF 应用场景
设想一下在一些新闻推荐系统中,也许物品——也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用 User-CF可能效果更好;
所以,推荐策略的选择其实和具体的应用场景有很大的关系
基于协同过滤的推荐优缺点
优点:
它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所以这种方法也是领域无关的
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好
存在的问题:
方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题
推荐的效果依赖于用户历史偏好数据的多少和准确性
在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等
对于一些特殊品味的用户不能给予很好的推荐
基本思想
用户具有一定的特征,决定着他的偏好选择;
物品具有一定的特征,影响着用户需是否选择它;
用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配;
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”;这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配;
有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐;没有时,可以根据已有的偏好数据,去发掘出隐藏的特征,这需要用到隐语义模型(LFM)
基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐 – 用的都是用户行为数据
基于近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类)
而基于模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发掘物品的潜在特征;这样的模型被称为 隐语义模型(Latent Factor Model,LFM)
隐语义模型(LFM)
用隐语义模型来进行协同过滤的目标
揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
通过矩阵分解进行降维分析
协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理
分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:
基于概率的隐语义分析(pLSA)
隐式迪利克雷分布模型(LDA)
矩阵因子分解模型(基于奇异值分解的模型,SVD)