推荐算法的改进
‘壹’ 如何改进SVM算法,最好是自己的改进方法,别引用那些前人改进的算法
楼主对于这种问题的答案完全可以上SCI了,知道答案的人都在写论文中,所以我可以给几个改进方向给你提示一下:
1 SVM是分类器对于它的准确性还有过拟合性都有很成熟的改进,所以采用数学方法来改进感觉很难了,但是它的应用很广泛 SVMRank貌似就是netflix电影推荐系统的核心算法,你可以了解下
2 与其他算法的联合,boosting是一种集成算法,你可以考虑SVM作为一种弱学习器在其框架中提升学习的准确率
SVM的本身算法真有好的改进完全可以在最高等级杂志上发论文,我上面说的两个方面虽然很简单但如果你有实验数据证明,在国内发表核心期刊完全没问题,本人也在论文纠结中。。
‘贰’ 如何算改进了一个算法,怎么改才叫改进了呢
我认为,所谓“改进”就是使发现原算法的不足之处,并优化之,结果是使该算法效率大大提高高,或者适用度更广泛,如果“改进”后的算法不比之前的更优,就不能算改进。反之,只要能够大大提高改算法的效率,或者使该算法适用度更广,就算是改进。至于改进一个细节,如果是一个重要的细节,当然也算是改进。
不过,算法都是高手发明的,他们在公布之前一定将这种算法优化过了,如果要再改进,那一定要非常细心或者比他更高才行。
‘叁’ 对算法的改进,改进多少才行才算合理
我也是这个建议。
1.在空间可以承受的情况下考虑改进时间效率。大的算法的话可以对其中的部分算法进行替换。
2.如果时间效率己达理论下限,可以进行空间效率的改进,包括实现的数据结构等等。
3.如果要求实现算法的话,针对代码的改进余量不小。仅仅从语言本身考虑就有很大的优化空间。例如关键算法用ASM宏实现,数据结构的组新组织(涉及CPU取数时的对齐问题),算法的函数组织等等。
对一个成熟算法的任何一方面进行改进都是了不起的工作。
‘肆’ 第十章 数据推荐算法——推荐算法与效果评价
不同应用场景中推荐算法的评估方式不一定相同,主要集中在五个方面:
1、准确率、召回率及覆盖率评价
2、流行度与多样性评价
3、推荐结果序列评价
4、新颖性与创新评价
5、用户满意度
对于推荐算法,很多企业也在不断地通过用户画像的方式刻画用户特征,从而不断改进推荐系统。通过用户画像的方式可以有效地解决如下三个方面的问题:
1、通过各个渠道绘制用户画像,可以较好地解决冷启动问题。
2、通过用户画像可以丰富完整的用户特征信息,为更广泛的推荐提供信息基础。
3、构建更加丰富完整的用户特征信息,为更广泛的推荐提供信息基础。
推荐算法与关联规则分析在某种程度上相似,都利用了大众用户的行为记录,关联性规则分析也可以用于辅助推荐,它们之间的差异:
1、推荐算法尤其是协同过滤推荐是基于一种间接性的推荐;而关联规则分析则是对直接性的分析。
2、推荐算法的推荐过程比较复杂,不仅与物品本身属性有关,还与个人的喜好兴趣有很大关系;而关联规则分析过程与个人的喜好或者兴趣无关,更多地倾向于基于大众用户的行为分析物品之间的潜在关系。
‘伍’ 3-27 抖音推荐页、同城页、关注页算法
上次跟二表哥聊完,感觉还有很多东西没有聊透彻。
比如抖音的推荐系统是如何工作的,他背后的算法是什么,为什么要采用这些算法。
带着歇着疑问,我又抓到了二表哥,问出了这些问题。
二表哥笑着说,因为抖音是一个拥有大量用户和创作者的平台,每分钟有上千个视频,被上传到抖音上,用户不可能观看完每一个抖音视频,所以抖音需要一个复杂的推荐算法,让用户能从海量的内容当中,挑选到他最喜欢的视频,简单来说这个算法,会从抖音所有的视频当中挑选出用户可能最喜欢的那一个。
我说,那抖音算法是如何知道每个人的喜好呢?
二表哥说,其实答案很简单也很抽象,就是利用数据,抖音会用尽可能多的数据,来发现用户喜欢什么样的视频,比如视频本身信息。
我说,你还是别简单抽象了,说点具体的。
他说,你可以先试试觉得有哪些?
我说,我知道肯定包括标题,内容,以及点赞评论,可能还会有视频发布之后,其他用户与这个视频的交互历史,以及观看多长时间等。
他说,已经很全了,除此之外,也会参考这个用户历史上看过的视频信息,用户与看过视频之间的交互,比如是否有点赞评论或分享等行为。
我说,那么如何让推荐算法推荐我的视频呢?
他说,答案也比较简单,让用户喜欢你的视频推荐算法的目标是让观众看到自己喜欢的视频,尽可能准确预测用户的喜好,所以观众如果喜欢你的视频,我们就会尽量把你的视频推荐给喜欢你的观众,
另外推荐算法不是一成不变的,抖音也在持续改进和优化我们的推荐算法,
一方面利用更丰富的信息来理解视频和观众,
另一方面也会与时俱进,让算法能够更准确的反映用户的真实喜好。
我说,你根据不同的场景来详细介绍一下推荐系统是如何工作的吧。
他说,抖音主要由三个页面,一个是关注页面,一个是推荐页,一个是同城页,我可以分享分享这个三个场景下的视频推荐的大概逻辑。
他接着说,一般大家看的推荐页居多,可以先说说抖音的推荐页是如何工作的。
一般推荐页作为抖音的首页,是大部分用户进入痘印后见到的第1个页面,他的目的是从抖音所有上传的视频中选择用户可能喜欢的内容。
这其中,既包括新鲜发布的内容,也包括和这个人口味相近,其他人喜欢的内容,以及他关注的内容等。
我说,是不是我的账号就算是被用户关注了,也不一定在这个推荐页出现?这个页面的视频是不是全部都是由推荐算法决定?
他说,是的,这个页面的视频,完全由推荐算法决定,跟是否关注没有关系。
推荐算法会考虑多方面的信息,来判断用户是否喜欢一个视频。这其中包含视频本身的点赞率、评论率、观看时长因素,也包含和这该用户相似的其他用户对这个视频的喜爱程度,以及用户的观看历史、搜索历史和视频的创作者是否有比较高的粉丝粘性等。
我说,说了这么多,如何在推荐页获得更多的观看呢?
他说,直接说吧,我有四个建议,我刚好还有个夕会要开,我先简单发给你一个小文档吧,你先看看。
过了一会儿,我打开了二表哥的对话框,看到了这几个建议:
第一,养成良好的发布习惯,持续稳定的发布作品,持续稳定的发布作品,有助于推荐算法更全面了解你的潜在观众维系和粉丝的关系。
第二,创作高质量的作品,让观众持续喜欢你的内容,比如吸引更多的点赞评论分享,以及获得更多的观看时长。
第三,形成自己独特的创作风格,让自己的作品更有粉丝粘性。
第四,通过阅读评论等方式来了解用户反馈,持续改进自己的内容
我一边看一边回忆刚刚二表哥讲过的东西,顺便记录下来。
等到二表哥开完夕会,七表妹也跟着他一起过来了。
七表妹说,最近我发现用户在抖音里面搜索视频的量也挺大的,而且我认为搜索是用户主动寻找信息的,他对搜索到视频有很好的认识和粘性,二表哥你了解抖音的搜索算法吗
二表哥说,抖音有大量的视频,用户对自己的需求虽然清晰,但是表达的方法是非常模糊的,这个跟传统的搜索引擎一样。
所以抖音的搜索算法一方面要了解视频的内容是什么,另一方面还要想办法去理解用户的需求。
七表妹说,意思抖音就是二者之间的桥梁,来完成用户和视频的匹配。那他是怎么来完成这个桥梁的作用的呢?
二表哥说,主要是通过数据,有三类。
第一、视频本身的数据,包括视频上一切可见的文字,视频本身的清晰度,视频的内容等。
第二、用户输入的查询词,搜索会利用最先进的,自然语言处理技术,来处理用户输入的查询词,理解用户的需求,
第三、用户和视频的互动数据,包括在推荐、搜索等各个渠道的互动数据,
七表妹说,那么如何让视频在推荐算法上,获得比较好的排名呢?
二表哥说,两点:第一创造好的视频,第二给视频加上精准的文字描述,便于搜索算法理解视频,另外,搜索算法不是一成不变的,我们的目标是不停地改进用户的搜索体验。
围绕这个目标,抖音同样也会做两件事,一方面加强搜索技术的研发和应用,另一方面也会加强各种作弊行为的识别和打压。
我说,算法说的够多了,刚刚咱们聊到一半,只说了推荐页的算法规则,还有两个页面同城页和关注页的大概算法是什么呢?
二表哥说,关注页是一个可以集中看到用户关注的创作者发布视频的页面,是用户通过关注行为定制的一个内容流,
我说,那很容易想到的一个点就是,想要在关注页获取更多的观看,就是获取更多的粉丝,这样我们的作品就可以有更多的机会在关注页展示了。那怎么能够获取更多的粉丝呢?
他说,这个问题就很大了,简单2个建议吧,
第一,真诚的告诉你的观众,关注你能给他们带来什么,以及你的更新时间等等。
第二,持续为你的粉丝创作他们喜欢的内容,提高粉丝粘性,粉丝粘性越高的作者,越容易获得新的关注,今天的课程就到这里。
我说,还有什么要注意的点吗?我感觉我有个一百多万粉丝的账号,好多视频的播放量只有几万,甚至更低,感觉也不对呀。
他说,这个现象好多人也发现了,一个用户可以关注很多创作者,所以不一定所有关注人的内容都可以被观看完。
我说,你的意思是关注页也是根据每个人的喜好排序的,是个性化的。
他说,对的,如果想要在关注页获的更多的观看,也是要有优质的内容才行的。
我说,那获取粉丝也没太大用处了,还是要打造爆款内容才是正道了。
他说,不仅仅是关注页和推荐页,包括同城页是一样由推荐算法来决定的,只不过和推荐页不同的是,同城的观众群体是对同城信息更感兴趣的用户。
我说,同城人更关注本地新闻,美食,玩乐方面的信息内容。
他说,对,同城的内容更多的是因为页面、标题来被推荐,所以同城页的视频选择一个有意义的封面和标题更重要。
七表妹说,好了好了,下班了还说工作,烦死了。刚好我今天刷同城刷到了一个网红店,我刚订了位置,我们一起去尝尝吧。
完
‘陆’ 针对kmeans算法的缺点可以做哪些方面的改进
一些可以改进的方面包括:
初始化点的选择:可以使用更加有效的方法来选择初始聚类中心,以避免初始聚类中心的选择对结果的影响。
相异度度量方法:kmeans算法使用欧几里得距离作为相异度度量方法,但可以使用更加适合某些应用场景的其他相异度度量方法,如余弦相似度、皮尔逊相关系数等。
处理异常值:kmeans算法可能对异常值敏感,可以使用一些方法来降低对异常值的影响。
聚类数量的确定:kmeans算法需要提前确定聚类数量,可以使用一些方法来确定合适的聚类数量,如肘部法则、轮廓系数等。
并行化:kmeans算法是一种计算密集型算法,可以使用并行化技术加速计算。
‘柒’ 07_推荐系统算法详解
基于人口统计学的推荐与用户画像、基于内容的推荐、基于协同过滤的推荐。
1、基于人口统计学的推荐机制( Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。
2、对于没有明确含义的用户信息(比如登录时间、地域等上下文信息),可以通过聚类等手段,给用户打上分类标签。
3、对于特定标签的用户,又可以根据预设的规则(知识)或者模型,推荐出对应的物品。
4、用户信息标签化的过程一般又称为 用户画像 ( User Profiling)。
(1)用户画像( User Profile)就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。
(2)用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。
(3)作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础。
1、 Content- based Recommendations(CB)根据推荐物品或内容的元数据,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。
2、通过抽取物品内在或者外在的特征值,实现相似度计算。比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。
3、将用户(user)个人信息的特征(基于喜好记录或是预设兴趣标签),和物品(item)的特征相匹配,就能得到用户对物品感兴趣的程度。在一些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC)。
4、 相似度计算:
5、对于物品的特征提取——打标签(tag)
- 专家标签(PGC)
- 用户自定义标签(UGC)
- 降维分析数据,提取隐语义标签(LFM)
对于文本信息的特征提取——关键词
- 分词、语义处理和情感分析(NLP)
- 潜在语义分析(LSA)
6、 基于内容推荐系统的高层次结构
7、 特征工程
(1)特征( feature):数据中抽取出来的对结果预测有用的信息。
特征的个数就是数据的观测维度。
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征工程一般包括特征清洗(采样、清洗异常样本),特征处理和特征选择。
特征按照不同的数据类型分类,有不同的特征处理方法:数值型、类别型、时间型、统计型。
(2)数值型特征处理
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要的做法是归一化和离散化。
* 幅度调整归一化:
特征与特征之间应该是平等的,区别应该体现在 特征内部 。
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在3000000~15000000(万)之间,而住房面积在40-300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
* 数值型特征处理——离散化
离散化的两种方式:等步长——简单但不一定有效;等频——min -> 25% -> 75% -> max
两种方法对比:
等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用,而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能使用。
等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用。
(3) 类别型特征处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间。
One-Hot编码/哑变量:One-Hot编码/哑变量所做的就是将类别型数据平行地展开,也就是说,经过One-Hot编码哑变量后,这个特征的空间会膨胀。
(4) 时间型特征处理
时间型特征既可以做连续值,又可以看做离散值。
连续值:持续时间(网页浏览时长);间隔时间(上一次购买/点击离现在的时间间隔)。
离散值:一天中哪个时间段;一周中的星期几;一年中哪个月/星期;工作日/周末。
(5) 统计型特征处理
加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。
分位线:商品属于售出商品价格的分位线处。
次序性:商品处于热门商品第几位。
比例类:电商中商品的好/中/差评比例。
8、 推荐系统常见反馈数据 :
9、 基于UGC的推荐
用户用标签来描述对物品的看法,所以用户生成标签(UGC)是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。
一个用户标签行为的数据集一般由一个三元组(用户,物品,标签)的集合表示,其中一条记录(u,i,b)表示用户u给物品打上了标签b。
一个最简单的算法:
- 统计每个用户最常用的标签
- 对于每个标签,统计被打过这个标签次数最多的物品
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门的物品,推荐给他
- 所以用户u对物品i的兴趣公式为 ,其中 使用户u打过标签b的次数, 是物品i被打过标签b的次数。
简单算法中直接将用户打出标签的次数和物品得到的标签次数相乘,可以简单地表现出用户对物品某个特征的兴趣。
这种方法倾向于给热门标签(谁都会给的标签,如“大片”、“搞笑”等)、热门物品(打标签人数最多)比较大的权重,如果一个热门物品同时对应着热门标签,那它就会“霸榜”,推荐的个性化、新颖度就会降低。
类似的问题,出现在新闻内容的关键字提取中。比如以下新闻中,哪个关键字应该获得更高的权重?
10、 TF-IDF:词频逆文档频率 ( Term Frequency- -Inverse Document Frequency,TF-DF)是一种用于资讯检索与文本挖掘的常用加权技术。
TFDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TFIDF=TF IDF
TF-IDF的主要思想是 :如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-DF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
词频( Term Frequency,TF) :指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数的归一化,以防止偏向更长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。) ,其中 表示词语 i 在文档 j 中出现的频率, 表示 i 在 j 中出现的次数, 表示文档 j 的总词数。
逆向文件频率( Inverse Document Frequency,IDF) :是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文档数目除以包含该词语之文档的数目,再将得到的商取对数得到 ,其中 表示词语 i 在文档集中的逆文档频率,N表示文档集中的文档总数, 表示文档集中包含了词语 i 的文档数。
(11) TF-IDF对基于UGC推荐的改进 : ,为了避免热门标签和热门物品获得更多的权重,我们需要对“热门进行惩罚。
借鉴TF-IDF的思想,以一个物品的所有标签作为“文档”,标签作为“词语”,从而计算标签的“词频”(在物品所有标签中的频率)和“逆文档频率”(在其它物品标签中普遍出现的频率)。
由于“物品i的所有标签” 应该对标签权重没有影响,而 “所有标签总数” N 对于所有标签是一定的,所以这两项可以略去。在简单算法的基础上,直接加入对热门标签和热门物品的惩罚项: ,其中, 记录了标签 b 被多少个不同的用户使用过, 记录了物品 i 被多少个不同的用户打过标签。
(一)协同过滤(Collaborative Filtering, CF)
1、基于协同过滤(CF)的推荐:基于内容( Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容。
CF可以解决CB的一些局限:
- 物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐。
- CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干。
- CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系)
分为两类:基于近邻和基于模型。
2、基于近邻的推荐系统:根据的是相同“口碑”准则。是否应该给Cary推荐《泰坦尼克号》?
(二)基于近邻的协同过滤
1、 基于用户(User-CF): 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品。
在一般的应用中是采用计算“K-近邻”的算法;基于这K个邻居的历史偏好信息,为当前用户进行推荐。
User-CF和基于人口统计学的推荐机制:
- 两者都是计算用户的相似度,并基于相似的“邻居”用户群计算推荐。
- 它们所不同的是如何计算用户的相似度:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
2、基于物品(Item-CF):基于项目的协同过滤推荐的基本原理与基于用户的类似,只是使用所有用户对物品的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
Item-CF和基于内容(CB)的推荐
- 其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。
同样是协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?
- 电商、电影、音乐网站,用户数量远大于物品数量。
- 新闻网站,物品(新闻文本)数量可能大于用户数量。
3、 User-CF和Item-CF的比较
同样是协同过滤,在User-CF和ltem-CF两个策略中应该如何选择呢?
Item-CF应用场景
- 基于物品的协同过滤( Item-CF ) 推荐机制是 Amazon在基于用户的机制上改良的一种策略因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于物品的机制比基于用户的实时性更好一些,所以 Item-CF 成为了目前推荐策略的主流。
User-CF应用场景
- 设想一下在一些新闻推荐系统中,也许物品一一也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用 User-cf可能效果更好。
所以,推荐策略的选择其实和具体的应用场景有很大的关系。
4、 基于协同过滤的推荐优缺点
(1)基于协同过滤的推荐机制的优点:
它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所以这种方法也是领域无关的。
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
(2)存在的问题
方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
推荐的效果依赖于用户历史好数据的多少和准确性。
在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
对于一些特殊品味的用户不能给予很好的推荐。
(三)基于模型的协同过滤
1、基本思想
(1)用户具有一定的特征,决定着他的偏好选择
(2)物品具有一定的特征,影响着用户需是否选择它。
(3)用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配。
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”;这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配。
有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐;没有时,可以根据已有的偏好数据,去发据出隐藏的特征,这需要用到隐语义模型(LFM)。
2、基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐
- 基于近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类)
- 而基于模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发据物品的潜在特征;这样的模型被称为 隐语义模型 ( Latent Factor Model,LFM)。
(1)隐语义模型(LFM):用隐语义模型来进行协同过滤的目标:
- 揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
- 这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
通过矩阵分解进行降维分析
- 协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理。
- 分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:基于概率的隐语义分析(pLSA)、隐式迪利克雷分布模型(LDA)、矩阵因子分解模型(基于奇异值分解的模型,SVD)
(2)LFM降维方法——矩阵因子分解
(3)LFM的进一步理解
我们可以认为,用户之所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评分电影与这些隐藏因素的关联度,决定此未评分电影的预测评分。
应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不定是人直接可以理解的隐藏因子。
找到隐藏因子,可以对user和Iiem进行关联(找到是由于什么使得user喜欢/不喜欢此Item,什么会决定user喜欢/不喜欢此item),就可以推测用户是否会喜欢某一部未看过的电影。
(4)矩阵因子分解
(5)模型的求解——损失函数
(6)模型的求解算法——ALS
现在,矩阵因子分解的问题已经转化成了一个标准的优化问题,需要求解P、Q,使目标损失函数取最小值。
最小化过程的求解,一般采用随机梯度下降算法或者交替最小二乘法来实现交替最小二乘法( Alternating Least Squares,ALS)
ALS的思想是,由于两个矩阵P和Q都未知,且通过矩阵乘法耦合在一起,为了使它们解耦,可以先固定Q,把P当作变量,通过损失函数最小化求出P,这就是一个经典的最小二乘问题;再反过来固定求得的P,把Q当作变量,求解出Q:如此交替执行,直到误差满足阅值条件,或者到达迭代上限。
(7)梯度下降算法
‘捌’ 推荐算法小结
输入 :与用户相关的包含众多特征(feature)的数据:
用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。
输出 :推荐给用户的功能列表(根据得分高低排序)
函数 : 传统算法 、 机器学习算法 (Machine Learning)、 深度学习算法 (Deep Learning)
基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据VV、UV、日均PV或分享率等数据来按某种热度(加权)排序来推荐给用户。
访问次数 (VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。
独立访客 (UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。
PV访问量 (Page View):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。
优点:该算法简单,适用于刚注册的新用户
缺点:无法针对用户提供个性化的推荐
改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。
基于用户的协同过滤推荐算法 (UserCF):针对目标用户(A),先通过兴趣、爱好或行为习惯找到与他相似的“其他用户”(BCD...),然后把BCD...喜欢的并且A没有浏览过的物品或功能推给A。
基于物品的协同过滤推荐算法 (ItemCF):例如由于我之前看过张艺谋导演的《英雄》这部电影,会给我推荐《红高粱》、《归来》等同导演电影。
1)分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;
2)根据用户对物品的隐性评分计算得到所有用户之间的相似度;
3)选出与目标用户最相似的K个用户;
4)将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。
优点:
基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;
适于物品比用户多、物品时效性较强的情形,否则计算慢;
能实现跨领域、惊喜度高的结果。
缺点:
在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;
用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;
推荐结果的个性化较弱、较宽泛。
改进:
两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;
如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;
在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;
把类似地域用户的行为作为推荐的主要依据。
1)分析各个用户对物品的浏览记录;
2)依据浏览记录分析得出所有物品之间的相似度;
3)对于目标用户评价高的物品,找出与之相似度最高的K个物品;
4)将这K个物品中目标用户没有浏览过的物品推荐给目标用户
优点:
基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。
物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。
应用最广泛,尤其以电商行业为典型。
适于用户多、物品少的情形,否则计算慢
推荐精度高,更具个性化
倾向于推荐同类商品
缺点:
不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。
在物品冷启动、数据稀疏时效果不佳
推荐的多样性不足,形成信息闭环
改进:
如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;
活跃用户对物品相似度的贡献小于不活跃的用户;
同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;
在描述目标用户偏好时,给其最近喜欢的商品较高权重;
同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。
(相似度计算:余弦相似度、Jaccard系数、皮尔森相关系数等)
常见经典 ML 分类算法:
逻辑回归 (Logistics Regression)
支持向量机 (SVM)
随机森林 (Random Forest)
提升类算法 (Boosting):Adaboost、GBDT、XGboost
一般处理流程:数据处理 -> 特征工程 -> 模型选择 -> 交叉验证 -> 模型选择与模型融合
特征清洗 :剔除不可信样本,缺省值极多的字段不予考虑
特征预处理 :单个特征(归一化,离散化,缺失值补全,数据变换),多个特征(PCA/LDA降维,特征选择)
使用工具 :pandas(python开源库)
模型选择与模型融合 :根据交叉验证得分选择前几名模型,然后进行模型融合(Bagging、Boosting、Stacking)
DL 优势 :ML 中特征工程是十分重要并且要根据行业经验确定,DL 可以自己从数据中学习特征。DL 能自动对输入的低阶特征进行组合、变换,得到高阶特征。对于公司产品应用领域来说,用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。这些就可以作为低阶特征输入。
RNN系列 (处理文本数据)
CNN系列 (处理图像数据)
DNN (处理一般性分类)
‘玖’ 推荐系统中——矩阵分解
在推荐系统中,我们经常会拿到一种数据是user—item的表格,然后对应的是每位user对每个item的评分,如下图:
对于这个问题我们通常会选择矩阵分解的方法来解决。
我们常见的推荐系统矩阵分解有BPR、SVD(funkSVD)、ALS、NMF、WRMF。
接下来就来看看推荐系统中常用的几种矩阵分解的区别,主要通过公式、特点和适合哪种数据这几个方面来讲。
对于 矩阵 进行SVD分解,把矩阵 分解为:
其中 是矩阵 中较大的部分奇异值的个数,一般会远远的小于用户数和物品数。如果我们要预测第 个用户对第 个物品的评分 ,则只需要计算 即可。通过这种方法,我们可以将评分表里面所有没有评分的位置得到一个预测评分。通过找到最高的若干个评分对应的物品推荐给用户。
可以看出这种方法简单直接。但是有一个很大的问题我们忽略了,就是SVD分解要求矩阵是稠密的,也就是说矩阵的所有位置不能有空白。所以传统的SVD实际上在推荐系统中还是比较难用的。
前面说到,传统的SVD要求的矩阵是稠密的。那么我们现在要解决的问题就是避开矩阵稀疏的问题。
FunkSVD是将矩阵 分解为两个矩阵 ,这里采用了线性回归的思想。我们的目标是让用户的评分和用矩阵乘积得到的评分残差尽可能的小,也就是说,可以用均方差作为损失函数,来寻找最终的 。
对于某一个用户评分 ,用FunkSVD分解,则对应的表示为 ,采用均方差做为损失函数,则我们期望均方差尽可能小:
在实际应用中,我们为了防止过拟合,会加入一个L2的正则化项,因此正式的FunkSVD的优化目标函数 :
其中 为正则化稀疏,需要调参。对于这个优化问题,我们一般通过梯度下降法来进行优化得到结果。
将上式分别对 求导,然后利用梯度下降法迭代, 的迭代公式如下:
还有许多基于FunkSVD的方法进行改进的,例如BiasSVD、SVD++等,这里就不细说了。
在很多推荐场景中,我们都是 基于现有的用户和商品之间的一些数据,得到用户对所有商品的评分,选择高分的商品推荐给用户 ,funkSVD算法的做法最基本的做法,使用起来十分有效,而且模型的可扩展性也非常优秀,其基本思想也能广泛运用于各种场景中。并且对于相似度计算方法的选择,有多种相似度计算方法,每种都有对应优缺点,可针对不同场景使用最适合的相似度计算方法。由于funkSVD时间复杂度高,训练速度较慢,可以使用梯度下降等机器学习相关方法来进行近似计算,以减少时间消耗。
参考: https://www.cnblogs.com/pinard/p/6351319.html
https://zhuanlan.hu.com/p/34497989
https://blog.csdn.net/syani/article/details/52297093
在有些推荐场景中,我们是为了在千万级别的商品中推荐个位数的商品给用户,此时,我们更关心的是用户来说,哪些极少数商品在用户心中有更高的优先级,也就是排序更靠前。也就是说,我们需要一个排序算法,这个算法可以把每个用户对应的所有商品按喜好排序。BPR就是这样的一个我们需要的 排序算法 。
在BPR算法中,我们将任意用户 对应的物品进行标记,如果用户 在同时有物品 和 的时候点击了 ,那么我们就得到了一个三元组 ,它表示对用户 来说, 的排序要比 靠前
BPR是基于矩阵分解的一种排序算法,但是和funkSVD之类的算法比,它不是做全局的评分优化,而是 针对每一个用户自己的商品喜好分贝做排序优化 。因此在迭代优化的思路上完全不同。同时对于训练集的要求也是不一样的, funkSVD只需要用户物品对应评分数据二元组做训练集,而BPR则需要用户对商品的喜好排序三元组做训练集 。
参考: https://www.cnblogs.com/pinard/p/9128682.html
ALS是交替最小二乘的简称。在机器学习中,ALS特指使用交替最小二乘求解的一个协同推荐算法。如:将用户(user)对商品(item)的评分矩阵分解成2个矩阵:user对item 潜在因素的偏好矩阵(latent factor vector),item潜在因素的偏好矩阵。
假设有m个user和n个item,所以评分矩阵为R。ALS(alternating least squares)希望找到2个比较低纬度的矩阵(X和Y)来逼近这个评分矩阵R。
ALS的核心就是这样一个假设:打分矩阵是近似低秩的。换句话说,就是一个 的打分矩阵可以由分解的两个小矩阵 和 的乘积来近似。这就是ALS的矩阵分解方法。
为了让X和Y相乘能逼近R,因此我们需要最小化损失函数(loss function),因此需要最小化损失函数,在此定义为平方误差和(Mean square error, MSE)。
一般损失函数都会需要加入正则化项(Regularization item)来避免过拟合的问题,通常是用L2,所以目标函数会被修改为:
上面介绍了“最小二乘(最小平方误差)”,但是还没有讲清楚“交替”是怎么回事。因为X和Y都是未知的参数矩阵,因此我们需要用“交替固定参数”来对另一个参数求解。
先固定Y, 将loss function对X求偏导,使其导数等于0:
再固定X, 将loss function对Y求偏导,使其导数等于0:
然后进行迭代。
在实际应用中,由于待分解的矩阵常常是非常稀疏的,与SVD相比, ALS能有效的解决过拟合问题 。基于ALS的矩阵分解的协同过滤算法的可扩展性也优于SVD。与随机梯度下降的求解方式相比,一般情况下随机梯度下降比ALS速度快;但有两种情况ALS更优于随机梯度下降:(1)当系统能够并行化时,ALS的扩展性优于随机梯度下降法。(2)ALS-WR能够有效的处理用户对商品的隐式反馈的数据。
但是ALS算法是无法准确评估新加入的用户或商品。这个问题也被称为冷启动问题。
参考: https://flashgene.com/archives/46364.html
https://flashgene.com/archives/52522.html
https://lumingdong.cn/recommendation-algorithm-based-on-matrix-decomposition.html#ALS
非负矩阵分解(Non-negative Matrix Factorization,NMF)算法,即NMF是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。NMF中要求原始的矩阵V的所有元素的均是非负的,并且矩阵V可以分解出的两个小矩阵也是非负的,
给定一个打分矩阵R,NMF的目标是求解两个非负秩矩阵 最小化目标函数如下:
计算 的梯度如下:
其中:
采用梯度下降的参数优化方式, 可得W以及H的更新迭代方式见下式:
在矩阵分解基础上,加入了隐向量的非负限制。然后使用非负矩阵分解的优化算法求解。
要用NMF做矩阵分解有一个很大的前提—— 用户item之间的评分矩阵要求是非负并且分解出的小矩阵也要满足非负约束 。NMF分解是对原矩阵的近似还原分解,其存在的问题和ALS相像,对于未知的评分预测相当不准确。
参考: https://flashgene.com/archives/52522.html
http://tripleday.cn/2017/01/12/sparse-nmf/
在有些场景下,虽然 没有得到用户具体的评分,但是能够得到一些类似于“置信度”的信息(也称为隐式反馈信息) ,例如用户的游戏时长、观看时长等数据。虽然时长信息不能直接体现用户的喜好,但是能够说明用户喜欢的概率更大。在此场景下,用户-物品记录可以表示为一个置信度 和一个0-1指示量 (用户-物品是否有交互),如果用户-物品没有交互,那么置信度就为0。
“带权”就是根据置信度计算每条记录对应损失的权重,优化的目标函数如下:
权重通过置信度计算得到,可以使用 。由于未发生的交互也存在于损失函数中,因此惯用的随机梯度下降存在性能问题,为此采用ALS来优化模型,因此训练过程如下:
(1)更新每个用户的向量:
(2)更新每个物品的向量:
前面除了BPR以外,我们讲的算法都是针对显式反馈的评分矩阵的,因此当数据集只有隐式反馈时,应用上述矩阵分解直接建模会存在问题。而WRMF就可以解决隐式反馈的问题。
参考: https://sine-x.com/gorse-2/
https://flashgene.com/archives/52522.html
基于现有的用户和商品之间的一些数据,得到用户对所有商品的评分,选择高分的商品推荐给用户,可以根据以往的评分矩阵做全局的评分优化。有多种从SVD的改进算法可选择,如:表示biasSVD、SVD++、TimesSVD等
funkSVD可以解决矩阵稀疏的问题,但是其时间复杂度高,训练速度较慢,可以使用梯度下降等机器学习相关方法来进行近似计算,以减少时间消耗。
ALS算法和SVD的使用场景相似,也是基于用户——商品评分数据得到全局用户对商品的评分。
ALS能有效的解决过拟合问题,但是ALS算法是无法准确评估新加入的用户或商品。这个问题也被称为冷启动问题。
要用NMF做矩阵分解有一个很大的前提—— 用户item之间的评分矩阵要求是非负并且分解出的小矩阵也要满足非负约束 。NMF分解是对原矩阵的近似还原分解,NMF用法和SVD、ALS相似。
NMF存在的问题和ALS相像,对于未知的评分预测相当不准确。
BPR是基于矩阵分解的一种排序算法,但是,它不是做全局的评分优化,而是 针对每一个用户自己的商品喜好分贝做排序优化 。因此在迭代优化的思路上完全不同。 BPR需要用户对商品的喜好排序三元组做训练集 。
当 没有得到用户具体的评分,但是能够得到一些类似于隐式反馈信息时,就可使用WRMF进行矩阵分解。