基于协同过滤的发型推荐算法
2019-05-27张帅贾年
张帅,贾年
(西华大学计算机与软件工程学院,成都 610039)
0 引言
随着计算机技术和互联网技术的飞速发展,当今社会已然进入了信息爆炸时代。便利的互联网和日益普及的移动终端极大地提高了人们获取信息的速度,但是互联网上的信息量增长迅速,因为信息量极大的原因,用户有时候很难快速地找到自己想要的或者感兴趣的信息[1]。因此,推荐系统应运而生。为了能够让用户在短时间内迅速得到自己想要的信息,推荐系统通过对互联网上海量的信息经过过滤整合,结合用户自己的兴趣偏好等信息,通过推荐算法的计算,最终将用户最有可能感兴趣的信息及时的推荐给用户,提高了用户上网的效率[2]。经过多年的完善和细化,推荐算法越来越成熟,一般的推荐算法主要包括基于内容的推荐算法、混合推荐算法和协同过滤推荐算法[3]。
进入21世纪后,人们的生活水平越来越高,因此大家对自己的生活质量的要求也越来越高,其中的一个例子就是对发型的要求。爱美之心,人皆有之,大家都希望剪一个适合自己的发型让自己看起来更加帅气或美丽。社会在进步,美发行业也在进步,各种理发店越来越多,各种发型也越来越多,在面对众多发型选择时大家总会束手无策。
针对上述问题,本文结合协同过滤算法,将个性化推荐技术应用于发型推荐,根据用户的兴趣偏好,为用户提供个性化的发型推荐,对协同过滤推荐算法进行了进一步的研究。
1 协同过滤算法
推荐算法的种类很多,在目前应用最广泛、比较成功的所有的推荐算法中,协同过滤算法在其中占据一席之地。协同过滤算法于1992年由Golderg、Nicols和Terry等学者首次提出这个概念,但是当时并没有将此算法运用地很好,近些年因为互联网的迅速发展,有了海量的信息供我们使用,协同过滤算法开始大展身手[4]。
协同过滤算法的主要思想是对于具有相同或相似的兴趣爱好的用户们,其中某一个用户喜欢某一个物品,那么另一个用户也可能会喜欢这个物品,则就将此物品推荐给后者。协同过滤算法大致可以通过三个步骤达到推荐效果:第一步,数据建模,构建一个比较精确的用户偏好模型;第二步,计算用户间的相似度,生成目标用户的邻居集合;最后一步是根据生成的邻居集,产生TOP-N个推荐数据[5]。
一般来说,我们将协同过滤算法分类为基于用户、基于项目以及基于模型的推荐算法这三种类型[6]。
(1)基于用户的协同过滤推荐算法主要是通过计算用户与用户之间的相似度,将得到的相似度进行大小排列后得到与目标用户喜好相似度最高的用户,根据此相似度最高的用户的喜好来为目标用户推荐其最有可能感兴趣的物品。
(2)基于项目的协同过滤推荐算法主要是通过计算已评价项目和待遇测项目的相似度,将相似度作为权重,加权其他已评价项目的评价分数,得到预测项目的预测值。
(3)基于模型的协同过滤推荐算法主要是通过对用户——项目评分矩阵进行分析和数据挖掘后,建立目标用户的评分预测模型,根据目标用户的历史评分数据分析其兴趣偏好,最后来对目标用户未评分的项目进行评分预测。此算法可以适当地解决推荐算法中的数据稀疏性和冷启动的问题[7]。
2 基于协同过滤的发型推荐算法
2. 1 算法步骤简述
本文发型推荐的算法的实现主要分为以下几个步骤:
输入:输入顾客——发型的评分矩阵R。
输出:顾客i对未评分发型的预测评分S(i,h)。
(1)使用余弦相似度计算目标顾客i与其他所有顾客的相似度 sim(i,Ua),i≠Ua,Ua∈U,U为所有顾客的集合。
(2)生成顾客 i的最近邻居集合 Ni={N1,N2,N3,...,Nk},i不属于 Ni。
(3)得到顾客i对未评分发型h的预测评分S(i,h)为:
其中Rˉi和Rˉu分别为顾客i和顾客u对所有发型的评分的平均分,R(u,h)是顾客 u对发型 h的评分。
算法的执行流程如图1所示。
2. 2 数据获取
本文中所有的信息数据获取来自西华大学周围的数十家理发店的顾客。设定用户对每种发型的喜好程度为5分制,最喜欢为5分,最不喜欢为1分,男生不对女生发型做出评价或者女生不对男生发型做出评价以0分定义。在一个多月时间内,总共获取到近300位顾客对20多种发型的喜好评分数据。
图1 推荐算法流程图
2. 3 数据建模
在任何的一个推荐系算法中,都是根据用户对某一些对象的偏好程度来为用户产生推荐。因此,用户偏好模型的构造是推荐算法能否成功的关键[8]。推荐质量的好与坏很大程度上取决于用户偏好模型表示用户偏好的能力。
用户偏好模型的建立依赖于搜集到的用户信息,这些信息的获取方法主要包括显示获取和隐式获取两种[9]。显示获取主要是取决于用户显示的对一些商品的评价的高低来表达用户的兴趣;隐式获取主要是用户在网站上的一些行为如浏览时间、浏览频率等来表达用户的兴趣。本文采取的是显示获取用户兴趣偏好的方法。
本文通过建立用户——项目评分矩阵,对采集到的实验数据进行建模,将推荐系统表示为二维的顾客——发型评分矩阵R(U×H)。其中ui∈U为用户集合,hj∈H为发型集合,矩阵中的元素rij∈R代表某一用户对某一发型的评分。
2. 4 用户相似度计算
对于协同过滤算法而言,如何计算目标用户与其他用户之间的相似度是该算法的一个重点之处。一般的用户相似度计算方法主要有余弦相似度、欧氏距离、皮尔森相关系数以及Jaccard距离等[10]。本文使用的是基于余弦相似度的算法,算法公式如下:
其中cos(θ)的值越接近1,就代表夹角越接近零度,也就是两个向量越相似,即两个用户的兴趣偏好相似度越高。举例如下:
(1)首先从采集的数据中取一些数据定义一个顾客——发型评分的矩阵R,如表1。
表1
(2)接下来利用上述的公式(2)对矩阵R中的数据进行运算,得到矩阵Rcos,如表2。
表2
矩阵Rcos就是基于理发店顾客的相似度矩阵。
2. 5 邻居集的生成
依据推荐算法,对每一个目标用户u最终都会产生一个根据相似度大小排列的邻居集合Ni={N1,N2,N3,...,Nk},u不属于 Ni,从 N1到 Nk表示用户 u与邻居用户Ni的相似性大小的值从大到小的排列。
根据研究数据表明,邻居集和大小k的取值会影响算法的精确度,k的取值过于大或者过于小都会影响到推荐的精确度,根据研究k的值一般为
2. 6 推荐结果生成
2. 7 实验结果及分析
推荐结果生成主要分为以下两个步骤:
第一步是对目标用户的邻居集即上述所说的集合Ni进行搜寻,通过使用TOP-N方法选出排名靠前的n个用户作为目标用户实际可供选择的邻居用户。
第二步是根据相似度最高的邻居用户对某一物品的评分来预测目标用户可能的评分。
本文所有的实验数据均来自西华大学周围的数十家理发店的顾客亲身评分。从采集到的数据中拿出180名顾客的评分数据作为训练集数据,将剩余的95名顾客的评分数据作为测试集来测试算法的准确性。
为了验证推荐结果的好坏,本文采用平均绝对误差MAE作为测评标准。平均绝对误差通过计算目标用户的预测评分与实际的用户评分这两者之间的偏差来衡量预测的准确性,MAE值越小,也就意味着推荐的效果越好,越符合目标用户的偏好。具体的公式如下:
其中N是用户——项目矩阵中所有未评分的发型的数目。Pi是系统对发型i的评分预测值,Ti是顾客——发型评分矩阵中元素的值。MAE的值越小,则意味着该推荐系统预测目标用户的评分就越准确。
实验结果表明:95个测试集用户的平均MAE=0.49。测试结果较为满意,因此,该算法可行性很高。因篇幅限制,表3列举了10个测试集用户的MAE。
表3 MAE值
3 结语
针对当下时代进步,社会进步,人们越来越注重自己的形象,所以导致发型行业飞速发展,各式各样的发型层出不穷,大家不能很好地选择一个自己喜欢的发型的情况,本文利用从理发店收集到的真实数据研究了基于协同过滤的发型推荐算法,通过对采集到的数据使用协同过滤算法进行处理后,实现了对目标用户推荐符合其偏好的发型。实验结果表明,协同过滤算法可以应用于发型推荐。下一步的工作是考虑到发型师的因素,每个顾客有自己的脾气和性格,所以会更喜欢符合自己脾气性格的发型师,接下来的工作就是实现为顾客推荐符合自己脾气性格的发型师,并由此发型师来为顾客打造一个顾客自己喜欢的发型。