文章快速检索     高级检索
  浙江大学学报(工学版)  2017, Vol. 51 Issue (6): 1252-1258  DOI:10.3785/j.issn.1008-973X.201
0

引用本文 [复制中英文]

毛宜钰, 刘建勋, 胡蓉, 唐明董. 基于Logistic函数和用户聚类的协同过滤算法[J]. 浙江大学学报(工学版), 2017, 51(6): 1252-1258.
dx.doi.org/10.3785/j.issn.1008-973X.201
[复制中文]
MAO Yi-yu, LIU Jian-xun, HU Rong, TANG Ming-dong. Collaborative filtering algorithm based on Logistic function and user clustering[J]. Journal of Zhejiang University(Engineering Science), 2017, 51(6): 1252-1258.
dx.doi.org/10.3785/j.issn.1008-973X.201
[复制英文]

基金项目

国家自然科学基金资助项目(61572186, 61572187);南京大学计算机软件新技术国家重点实验室资助项目(KFKT2015B04);湖南省高校创新平台开放基金资助项目(15K043)

作者简介

毛宜钰(1992—),女,硕士生,从事服务计算研究.
orcid.org/0000-0002-4693-6408.
E-mail: 1270397155@qq.com

通信联系人

胡蓉,女,讲师.
orcid.org/0000-0003-4970-8731.
E-mail: ronghu@126.com

文章历史

收稿日期:2016-11-17
基于Logistic函数和用户聚类的协同过滤算法
毛宜钰1 , 刘建勋1 , 胡蓉1,2 , 唐明董1     
1. 湖南科技大学 计算机科学与工程学院, 知识处理与网络化制造湖南省普通高校重点实验室, 湖南 湘潭 411201;
2. 南京大学 计算机软件新技术国家重点实验室, 江苏 南京 210000
摘要: 针对协同过滤推荐算法的数据稀疏性和可扩展性问题, 提出一种基于Logistic函数和用户聚类的协同过滤算法.计算用户对服务关键词的偏好度, 构建用户-关键词偏好向量, 并基于此向量对用户进行聚类;采用Logistic函数计算用户对服务的兴趣度, 并根据兴趣度相似性在目标用户所在类内寻找其最近邻居;通过最近邻居预测用户对服务的兴趣度, 将兴趣度较高的服务推荐给用户.基于真实数据集的实验证明, 与传统协同过滤算法相比, 本文算法能取得更高的准确率, 且聚类后算法运行时间显著减少, 有效地提高了推荐的实时性.
关键词: 用户聚类    Logistic函数    服务关键词    协同过滤    数据稀疏性    
Collaborative filtering algorithm based on Logistic function and user clustering
MAO Yi-yu1 , LIU Jian-xun1 , HU Rong1,2 , TANG Ming-dong1     
1. Key Lab of Knowledge Processing and Networked Manufacturing, School of Computer Science and Engineering, Hunan University of Science and Technology, Xiangtan 411201, China;
2. State Key Laboratory for Novel Software Technology, Nanjing University, Nanjing 210000, China
Abstract: A collaborative filtering algorithm based on Logistic function and user clustering was proposed in view of the data sparsity and scalability issues of collaborative filtering. At first, a user's preference for service keywords was computed, and a user-keyword preference vector was constructed, based on which users were clustered. Then, a user's interest in service was computed by using a Logistic function. According to the similarity between users' interest, the nearest neighbors were found in the cluster, which included the target user. At last, the user's interest in a service was predicted through the neighbors' interests in the service, and services with high interest prediction were recommended to the user. The experimental results based on real data set show that this algorithm can achieve higher accuracy than traditional collaborative filtering algorithms, and the running time of clustering algorithm is significantly reduced, which effectively improves the real-time performance of recommendation.
Key words: user clustering    Logistic function    service keywords    collaborative filtering    data sparsity    

近年来, 随着Web服务的迅速增加, 为用户推荐满足其个性化需求的服务成为一个极具挑战性的问题[1].推荐系统通过用户历史行为分析其潜在需求, 帮助用户过滤无效信息, 被广泛运用于电子商务领域[2].协同过滤技术是推荐系统中广泛运用的一种重要技术, 根据目标用户的历史评分数据找到一组与之兴趣相近的相似用户, 并通过相似用户对目标服务的历史评分来预测目标用户对目标服务的兴趣[3].传统的协同过滤方法在搜索相似用户时主要依据用户的历史评分数据.但在实际应用中, 用户不会对使用过的所有服务进行评价, 获取到的评分数据只是用户对实际使用服务数据中的极小一部分评分, 数据的极端稀疏使得用户之间常常因为没有共同评分项目而无法进行相似度比较[4].邓爱林等[5]提出基于项目评分预测的协同过滤推荐算法, 在度量用户间相似性时,对用户评分项目集合的并集的评分空值采用基于项目的协同过滤进行填补, 增加用户间共同评分项来提高预测精度.Kaleli[6]在搜索目标用户最近邻的过程中, 综合考虑评分相似性和评分不确定度差异2种信息, 使最近邻搜索结果更精确.Hatami等[7]则对传统评分预测公式加以改进, 将公式拆分为评分均值和平均用户偏差两部分, 评分均值由线性组合项目评分均值、目标用户评分均值、邻居用户评分均值得到.但这些方法并没有改变原有评分数据的数量, 没有从根本上解决数据稀疏性问题.

随着系统中用户和服务数目的日益增长, 从整个用户空间搜索目标用户的最近邻所需时间也越来越长, 极大地影响了推荐的实时性[8].Russell等[9]利用小波数据对项目空间进行压缩, 然后在压缩后的项目空间中使用传统协同过滤算法, 来提高算法的运行速度.Sarwar等[10]将奇异值分解(singular value decomposition, SVD)引入协同过滤推荐过程, 将原用户评分矩阵分解为3个低阶矩阵, 并基于低阶矩阵进行协同过滤推荐.数据集缩减和矩阵分解等方法虽然提高了推荐效率, 但可能会使有效信息丢失, 导致相似度计算结果不准确.Dakhel等[11]使用基于划分的K-means算法对稀疏矩阵进行划分, 将用户兴趣划分到不同类别中, 以缩小近邻搜索范围和需要预测的资源数目, 提高算法的可扩展性.聚类技术使得划分后的每一子数据集中的用户或项目都是相似的, 对可扩展性问题的改善程度较显著.

用户在使用网络时的点击、浏览、评论、评分等行为也能从某种程度上反映用户兴趣[12-13], 为分析用户兴趣提供了更多有利资源.因此, 本文提出一种基于Logistic函数和用户聚类的协同过滤算法.该方法首先结合调用次数和服务的关键词, 得到用户对服务关键词的偏好情况, 并利用TF-IDF方法计算用户对关键词的偏好度, 构建用户-关键词偏好向量, 以此进行用户聚类;然后引入Logistic函数, 根据用户对服务的历史调用次数, 计算用户对服务的兴趣度;最后, 在目标用户所在的聚类中寻找其最近邻居, 根据最近邻居对目标服务的兴趣度预测目标用户对目标服务的兴趣度.

1 基于Logistic函数和用户聚类的协同过滤算法

所提出的基于Logistic函数和用户聚类的协同过滤算法, 分为离线和在线两部分.离线时, 首先根据用户对服务的历史调用记录和服务的关键词得到用户对关键词的调用情况, 然后结合TF-IDF算法的思想计算每个关键词对于不同用户的重要程度, 得到用户-关键词偏好矩阵, 最后基于该矩阵对用户进行K-means聚类.在线时,系统只需要对用户调用矩阵标准化, 然后在类内寻找目标用户的相似邻居并进行预测, 因此, 算法产生推荐的时间将大大缩短.

1.1 离线用户聚类算法 1.1.1 用户-关键词偏好值计算

传统协同过滤方法对用户-服务评分数据的依赖程度较高, 评分数据的质量直接决定了算法的最终预测结果.在实际应用中, 用户只会对系统中极小一部分服务进行评价, 已评分项目一般只占项目总数的1%~2%, 数据的极端稀疏性导致推荐质量大大降低.

心理学认为, 人类的行为可以反映人类兴趣, 具有相似兴趣的人或群体, 具有相似的行为表现[14].因此, 用户使用服务时产生的浏览、评分、评论、频繁使用等行为都能反映用户兴趣.由于用户对服务的调用次数易于收集且存在一定规律, 可以通过调用次数数据来推测用户兴趣.但是, 单纯地通过用户对服务的共同调用行为来计算用户间相似性具有一定的片面性, 无法从本质上有效反映用户的真实兴趣.例如, 对于系统中的4个服务, Service1具有操作名getReplObject, getFilesState, TestAddObject, addObject, getNewIDs; Service2具有操作名runTCoffee, poll, getResults, checkStatus; Service3具有操作名getFilesState, getNewIDs; Service4具有操作名runTCoffee, checkStatus, ModifyContact.若用户1调用了Service1和Service2, 用户2调用了Service3和Service4, 虽然用户1和用户2之间没有共同调用服务, 但Service1和Service3拥有共同的操作名getFilesState和getNewIDs, Service2和Service4拥有共同的操作名runTCoffee和checkStatus, 因此, 用户1和用户2之间仍然可能存在较高的相似性.

用户选择某个服务通常是出于对该服务所能完成的功能感兴趣, 因此可以把用户对服务的兴趣映射到服务相应的操作名上, 有些没有共同调用服务的用户之间也能借助对某些操作名的共同调用数据进行相似性度量.服务的操作名等这些关键属性即为服务的关键词, 用户对关键词的关注程度能够体现用户的偏好.因此本文通过用户对服务的调用次数矩阵和服务的关键词矩阵计算得到用户-关键词调用矩阵.

定义1  用户-服务调用矩阵.假设在推荐系统中, 存在一个包含m个用户的集合U={u1, u2, …, um}和一个包含n个服务的集合S={s1, s2, …, sn}, 每个用户ui都调用过一定数量的服务, 用户ui对服务sj的调用次数记为Ri, j.那么, 所有用户对服务的调用情况组成一个用户-服务调用矩阵:

$ \mathit{\boldsymbol{R}} = \left[ {\begin{array}{*{20}{l}} {{R_{1,1}},\;\;{R_{1,2}},\;\; \ldots ,\;\;{R_{1,n}}}\\ {{R_{2,1}},\;\;{R_{2,2}},\;\; \ldots ,\;\;{R_{2,n}}}\\ {\;\;\; \vdots \;\;\;\;\;\;\; \vdots \;\;\;\;\;\; \ddots \;\;\;\; \vdots }\\ {{R_{m,1}},\;\;{R_{m,2}},\;\; \ldots ,\;\;{R_{m,n}}} \end{array}} \right] $

矩阵中的任意行是向量Rp=(Rp, 1, Rp, 2, …, Rp, n), 表示用户up对系统中所有服务的调用情况.

定义2  服务-关键词矩阵.在服务推荐系统中, 任意服务都拥有若干个关键词来表示该服务的关键属性, 若系统中的所有服务的关键词为T=t1, t2, …, tr, 定义服务-关键词矩阵:

$ \mathit{\boldsymbol{K}} = \left[ {\begin{array}{*{20}{l}} {1,\;\;\;\;0,\;\;\;\; \ldots ,\;\;\;\;1}\\ {0,\;\;\;\;1,\;\;\;\; \ldots ,\;\;\;\;1}\\ {\; \vdots \;\;\;\;\; \vdots \;\;\;\;\;\; \ddots \;\;\;\; \vdots }\\ {1,\;\;\;\;1,\;\;\;\; \ldots ,\;\;\;\;0} \end{array}} \right] $

其中, “1”表示某个服务具有某个关键词, “0”表示某个服务不具有某个关键词.矩阵中的任意列为向量Tq, 表示系统中所有服务拥有关键词tq的情况.在Web服务注册中心, 每个服务都拥有服务ID、服务名称和操作名等若干关键属性值, 可以从中提取出每个服务对应的属性值作为服务的关键词, 或者从推荐系统中用来记录服务信息的表中整理而成.

将用户对服务的调用次数映射到各服务的属性值上, 生成用户-关键词调用矩阵.

定义3  用户-关键词调用矩阵.由用户-服务调用矩阵R和服务-关键词矩阵K, 得到用户-关键词调用矩阵W, 具体公式如下:

$ \begin{array}{*{20}{l}} {\mathit{\boldsymbol{W}} = \mathit{\boldsymbol{R}} \cdot \mathit{\boldsymbol{K}} = \left[ {\begin{array}{*{20}{l}} {{\mathit{\boldsymbol{R}}_1}}\\ {{\mathit{\boldsymbol{R}}_2}}\\ \vdots \\ {{\mathit{\boldsymbol{R}}_m}} \end{array}} \right] \bullet \left[ {{\mathit{\boldsymbol{T}}_1},{\mathit{\boldsymbol{T}}_2}, \ldots ,{\mathit{\boldsymbol{T}}_r}} \right] = }\\ {\left[ {\begin{array}{*{20}{l}} {{\mathit{\boldsymbol{R}}_1} \cdot {\mathit{\boldsymbol{T}}_1}\;\;{\mathit{\boldsymbol{R}}_1} \cdot {\mathit{\boldsymbol{T}}_2}\;\; \ldots \;\;{\mathit{\boldsymbol{R}}_1} \cdot {\mathit{\boldsymbol{T}}_r}}\\ {{\mathit{\boldsymbol{R}}_2} \cdot {\mathit{\boldsymbol{T}}_1}\;\;{\mathit{\boldsymbol{R}}_2} \cdot {\mathit{\boldsymbol{T}}_2}\;\; \ldots \;\;{\mathit{\boldsymbol{R}}_2} \cdot {\mathit{\boldsymbol{T}}_r}}\\ {\;\;\; \vdots \;\;\;\;\;\;\;\;\; \vdots \;\;\;\;\; \ddots \;\;\;\;\;\; \vdots }\\ {{\mathit{\boldsymbol{R}}_n} \cdot {\mathit{\boldsymbol{T}}_1}\;\;{\mathit{\boldsymbol{R}}_n} \cdot {\mathit{\boldsymbol{T}}_2}\;\; \ldots \;\;{\mathit{\boldsymbol{R}}_n} \cdot {\mathit{\boldsymbol{T}}_r}} \end{array}} \right].} \end{array} $ (1)

在矩阵W中, 用户对不同的关键词有不同的调用次数, 即用户对不同的关键词有不同的偏好.可以认为, 用户ui对关键词tj的偏好随uitj的调用次数的增加而增加, 同时也随着tj被其他用户的调用频率的下降而下降.因此, 利用TF-IDF算法[15]的思想, 根据用户对关键词的调用次数来预测用户对关键词的偏好, 并以此进行用户聚类.

TF-IDF算法在信息检索领域有广泛的运用, 通常用来评估一字词对于一个文件集中的一份文件的重要程度.TF-IDF算法建立在这样的假设之上:对区别某个文档最有意义的词语是那些在该文档中出现频率高, 而在整个文档集合的其他文档中出现频率少的词语, 且一个单词在越少的文档中出现过, TF-IDF算法区别不同类别文档的能力就越大.本文把矩阵W中每个用户看成一个文档, 被用户调用的关键词为文档中的单词, 用户对关键词的调用次数即为文档中单词出现的次数, 由此来计算用户对不同关键词的偏好值, 得到用户-关键词偏好矩阵.

对于矩阵W中的任意用户ui, 若ui对关键词tj的调用次数为wi, j, 那么关键词tj与用户ui之间的相关性由词频Fi, j来计算:

$ {F_{i, j}} = \frac{{{w_{i, j}}}}{{{\sum _{q \in T}}{w_{i, q}}}}. $ (2)

其中T为系统中所有关键词集合, $\sum\nolimits_{q \in T} {{w_{i, q}}} $表示用户ui对集合T中所有关键词的调用次数总和.若调用过关键词tj的用户个数为Nj, 关键词tj对系统中所有用户的区分能力由逆向文档频率Ij来计算:

$ {I_j} = {\rm{lg}}\frac{n}{{{N_j}}}. $ (3)

其中, n为推荐系统中总的用户个数.因此, 用户ui对关键词tj的偏好度,由以下公式定义:

$ {P_{i, j}} = {F_{i, j}} \times {I_j} = \frac{{{w_{i, j}}}}{{{\sum _{q \in T}}{w_{i, q}}}} \times {\rm{lg}}\frac{n}{{{N_j}}}. $ (4)

由式(4) 可以看出, 对于大家关注度都很高的热门关键词, 计算得到的偏好度会相对偏低, 因为较高的关注度使得当前关键词预测单个用户兴趣的能力下降, 与其他关键词相比, 当前关键词对于用户的重要程度也相对变低.对于只有少数用户关注的关键词, 计算得到的偏好度会相对偏高, 这是因为该关键词对于关注用户的重要程度比其他用户更高, 受关注度少的关键词能更好地区分用户兴趣, 为下一步计算用户间相似度来聚类作准备.

用户uiT={t1, t2, …, tr}中所有关键词的偏好度组成用户ui的关键词偏好向量, 即Pi=(Pi, 1, Pi, 2, …, Pi, r).系统中所有用户的关键词偏好向量组成用户-关键词偏好矩阵:

$ \mathit{\boldsymbol{P}} = \left[ {\begin{array}{*{20}{l}} {{P_{1,1}},\;\;{P_{1,2}},\;\; \ldots ,\;\;{P_{1,r}}}\\ {{P_{2,1}},\;\;{P_{2,2}},\;\; \ldots ,\;\;{P_{2,r}}}\\ {\;\;\; \vdots \;\;\;\;\;\;\; \vdots \;\;\;\;\; \ddots \;\;\;\; \vdots }\\ {{P_{m,1}},\;\;{P_{m,2}},\;\; \ldots ,\;\;{P_{m,r}}} \end{array}} \right] $
1.1.2 用户聚类

在1.1.1节中, 利用调用次数和关键词构建了用户-关键词偏好矩阵, 一定程度上缓解了数据稀疏性问题.但在实际推荐系统中, 用户和服务的数量庞大且不断增加, 服务关键词数目也随之增加, 由用户对服务的调用次数和服务的关键词得到的用户-关键词偏好矩阵依然是一个高维稀疏矩阵.因此, 本节采用K-means算法对用户进行聚类, 将原始用户数据划分为兴趣相似、规模较小的子类别, 然后在类内寻找用户的相似邻居, 在提高推荐效率的同时进一步缓解数据的稀疏性.

K-means类算法是一种经典的基于距离的聚类算法, 通过对象间的距离来度量对象间的相似度, 最终将距离靠近的对象组成簇.本文采用余弦距离来计算相似度,对用户聚类:

$ {s_{{\rm{ab}}}} = \frac{{{\mathit{\boldsymbol{P}}_{\rm{a}}} \cdot {\mathit{\boldsymbol{P}}_{\rm{b}}}}}{{\parallel {\mathit{\boldsymbol{P}}_{\rm{a}}}\parallel \cdot \parallel {\mathit{\boldsymbol{P}}_{\rm{b}}}\parallel }}. $ (5)

其中, PaPb分别为用户uaub的关键词偏好向量, ||Pa||和||Pb||为向量的模.采用K-means算法将对不同的关键词偏好相似的用户划分到相同的用户簇中, 使得拥有相似兴趣的用户属于同一个聚类簇.一旦用户的兴趣发生改变, 用户就会逐渐偏离所属聚类中心直至跳出该聚类.

1.2 在线搜索用户邻居 1.2.1 用户调用矩阵标准化

调用次数反映了用户对不同服务的使用频率, 通常来说, 用户对某服务越感兴趣, 使用频率越高.因此, 调用次数可以无限增加,没有上限, 相对于传统的五分制评分系统, 调用次数能更精确地区分用户兴趣.但用户对不同服务的调用次数差别较大, 为了防止调用次数特别多的服务将用户对其他服务的兴趣淹没, 本文引入Logistic函数对调用次数进行非线性映射, 得到用户对服务的兴趣度.

Logistic函数是一种常见的S形函数, 定义域为(-∞, +∞), 值域为(0, 1), 由以下公式定义:

$ S\left( x \right) = \frac{1}{{1 + {{\rm{e}}^{ - x}}}}. $ (6)

该函数连续, 光滑, 严格单调, 函数曲线表明变量在开始阶段随自变量的增加缓慢增加, 经过发展期的加速增长, 最后速度逐渐减慢, 逼近极限值1.自然界的生物种群发展、神经元非线性感知、人类认知学习过程等都可以用Logisitic曲线来描述.

用户对服务的兴趣度是一个随调用次数呈非线性变化的变量, 在有众多可选项目的非独占条件下, 用户对某项目的调用次数越高意味着用户对该项目越感兴趣.因此, 可以利用Logistic函数模拟用户兴趣与调用次数间的关系, 得到用户对服务的兴趣度.用户ui对服务sj的兴趣度Hi, j计算公式如下:

$ {H_{i,j}} = \frac{1}{{1 + {{\rm{e}}^{ - ({R_{i,j}}}}{{^{ - \overline {{R_i}} }}^)}}}. $ (7)

Hi, j值在区间(0, 1), 随调用次数的增长呈非线性单调递增.Ri, j为用户ui对服务sj的调用次数, $\overline {{R_i}} $为用户ui对调用过的所有服务的平均调用次数.

图 1所示为用户兴趣度函数与Logistic函数.由图 1可知, 当调用次数为0时, 用户对服务的兴趣度是一个接近0的无限小的实数.这是由于调用次数为0并不意味着用户对服务完全没有兴趣, 只是暂无使用经验, 因此为兴趣度赋一个初始值.兴趣度曲线的拐点为($\overline {{R_i}} $, 0.5), 曲线过此点由下凹变成上凸, 表明当调用次数小于平均调要次数时,用户对服务的兴趣度呈先慢后快的增长趋势, 当调用次数大于平均调用次数时,增长率逐渐变小, 最后无限接近于1.

图 1 用户兴趣度函数与Logistic函数 Fig. 1 User's interestingness function and Logisticfunction

由式(7) 可知, 用户uiS={s1, s2, …, sn}中所有服务的兴趣度值组成用户ui的兴趣度向量, 即

$ {\mathit{\boldsymbol{H}}_i} = \left( {{H_{i, 1}}, {H_{i, 2}}, \ldots, {H_{i, m}}} \right). $
1.2.2 类内计算相似度寻找最近邻居

相似度计算是协同过滤推荐过程中的一个重要步骤, 常用方法有夹角余弦法和Pearson相关系数法[16-17].由于余弦相似性更适用于数据稀疏性较强的情况, 而本文在1.2.1节中已经计算出每个用户对每个服务的兴趣度, 此处采用相关相似性来度量目标用户与所在聚类中其他用户之间的相似度, 寻找目标用户的最近邻居.具体计算公式如下:

$ {S_{{\rm{ab}}}} = \frac{{\sum\limits_{{s_i} \in S} {\left[{\left( {{H_{{\rm{a}}, i}}-\overline {{H_{\rm{a}}}} } \right)\left( {{H_{{\rm{b}}, i}}-\overline {{H_{\rm{b}}}} } \right)} \right]} }}{{\sqrt {\sum\limits_{{s_i} \in S} {{{\left( {{H_{{\rm{a}}, i}} - \overline {{H_{\rm{a}}}} } \right)}^2}} } \sqrt {\sum\limits_{{s_i} \in S} {{{\left( {{H_{{\rm{b}}, i}} - \overline {{H_{\rm{b}}}} } \right)}^2}} } }}. $ (8)

式中:Sab为用户uaub之间的相似度, 集合S为用户ua和ub共同感兴趣的服务集合, Ha, i为用户ua对服务si的兴趣度, $\overline {{H_{\rm{a}}}} $$\overline {{H_{\rm{b}}}} $分别为用户uaub对集合S中所有服务的平均兴趣度.

1.3 兴趣度预测与推荐

经过1.2节中的相似度计算, 得到与目标用户相似度最大的前K个用户, 组成目标用户ua的最近邻居集Na, 然后通过以下公式得出目标用户ua对目标服务sq的兴趣度:

$ P({u_{\rm{a}}}, {s_q}) = \overline {{H_{\rm{a}}}} + \frac{{{\sum _{{u_{\rm{b}}} \in {N_{\rm{a}}}}}\left[{{S_{{\rm{ab}}}} \times \left( {{H_{{\rm{b}}, q}}-\overline {{H_{\rm{b}}}} } \right)} \right]}}{{\sum\nolimits_{{u_{\rm{b}}} \in {N_{\rm{a}}}} {{S_{{\rm{ab}}}}} }}. $ (9)

式中:$\overline {{H_{\rm{a}}}} $为用户ua对调用过的所有服务的平均兴趣度, Hb, q是用户ub对服务sq的兴趣度, $\overline {{H_{\rm{b}}}} $表示用户ub对调用过的所有服务的平均兴趣度.

得到目标用户对未调用过的服务的兴趣度预测值之后, 就可以选择出预测值最高的前N项服务推荐给用户, 即目前推荐系统中运用最为广泛的top-N推荐.

该算法产生推荐的具体过程如下:

算法1  一种基于Logistic函数和用户聚类的协同过滤算法

输入:用户-服务调用矩阵R, 服务-关键词矩阵K, 目标用户ua, 最近邻居个数c, 推荐集Irec项目数N.

输出:目标用户ua的top-N推荐集Irec.

Begin

W=formula1(R, K)

foreach uiU

        foreach tjT

          Fi, j=formula2(ui, tj)

          Ij=formula3(tj)

          Pi, j=formula4(Fi, j, Ij)

          Pi=add(Pi, j)

        end foreach

        P=add(Pi)

end foreach

从矩阵P中随机选择k个用户作为初始聚类中心, 记为I={I1, I2, …, Ik}, 剩余用户记为${{\rm{\complement}}_p}I$

do

foreach ui${{\rm{\complement}}_p}I$

        foreach cluster centre IjI

           s(ui, Ij)=formula5(ui, Ij)

        end foreach

        s(ui, Im)= max{s(ui, Ij)}

        Cm=Cmui//将用户ui加入相似度最大的聚类

end foreach

foreach cluster centre IjI

        Ij=update(Ij)

end foreach

loop until聚类中心I={I1, I2, …, Ik}不再变化

Cluster(k)=getcluster(ua)

H formula7(R)

foreach uj∈Cluster(k)

Sa, j=formula8(Ha, Hj)

end foreach

Na=sort(S(ua, uj), c)

foreach squa未调用的服务

        P(ua, sq)=formula9(ua, sq, Na, H)

end foreach

Irec=sort(P(ua, sq), N)

End

2 实验及分析 2.1 实验数据

本文采用学校网络中心Web服务超市数据作为实验数据集.为方便实验, 搜集并处理了从2010年8月到2012年2月之间的用户调用Web服务记录, 并拟合系统中原用户调用规律, 生成一部分仿真数据, 得到用户数目300个, Web服务数目319个, 共42 680条调用记录.该数据集包括用户调用Web服务日志, 用户-服务评分数据和Web服务基本信息表.实验中, 将Web服务的操作名作为服务的关键词, 将数据集的80%作为训练集, 其余20%作为测试集.

2.2 度量标准

本实验采用平均绝对误差(mean absolute error, MAE)和准确率2种评价指标来度量算法的推荐质量.MAE是一种最常用的推荐质量度量方法, 能直观地反映出算法的预测效果, 因此本文采用MAE来比较预测的兴趣度与实际中用户对服务的兴趣度(即标准化后的调用次数)之间的偏差.MAE越小, 意味着推荐质量越高.假设预测的兴趣度集合表示为(p1, p2, …, pn), 对应的实际兴趣度集合表示为(q1, q2, …, qn), 则

$ {\rm{MAE}} = \frac{{\sum _{i = 1}^{^n}|{p_i} - {q_i}|}}{n}. $ (10)

准确率表示正确推荐数目占所有推荐数目的比例, 用于比较基于“调用次数”和基于“评分”的协同过滤算法的推荐质量, 如果top-N推荐集中某个服务sq出现在目标用户测试集中的访问记录里, 则表示生成了一个正确推荐.具体计算如下:

$ P = \frac{C}{N}. $ (11)

其中, C表示算法产生的正确推荐数目, N表示算法生成的推荐总数.

2.3 关键词数目的影响

由于本文方法是根据用户对不同关键词的偏好来进行用户聚类, 为了检验服务的关键词数目是否会对推荐结果造成影响, 展开实验讨论了取不同关键词数目时的MAE值, 结果如图 2所示.图中K为关键词数目.从图 2可以看出,关键词数目为6时算法的推荐效果最好.当关键词数目过少时, 用户间共同感兴趣的关键词也很少, 进而影响相似度计算过程, 推荐效果变差;而当关键词数目过多时, 用户-关键词调用矩阵的稀疏程度增加, 使得MAE值升高.

图 2 关键词数目对MAE的影响 Fig. 2 Influence of number of key words on MAE
2.4 实验结果

为了验证本文提出的基于Logistic函数和用户聚类的协同过滤算法的有效性, 开展实验比较基于Logistic函数的协同过滤算法、基于用户聚类的协同过滤算法和本文算法3种推荐算法的MAE值, 最近邻居个数从5增加到30, 实验结果如图 3所示.图中E为最近邻居数目, 由图 3可见, 将Logistic函数与用户聚类相结合, 推荐效果得到明显提升.在不同的最近邻居数目下, 本文算法的MAE始终小于其他2种算法, 且在区间5~20内递减速度较快, 而后逐渐趋于平稳, 原因在于当最近邻居数目太少时, 度量用户兴趣可供参考的对象太少, 导致对用户兴趣分析不准确, 随着最近邻居数目的增多, 算法的推荐效果得到明显的改进.

图 3 不同方法平均绝对误差的比较 Fig. 3 Comparison on MAE using different methods

图 4描述了在聚类和不聚类2种情况下算法的计算效率, 图中T表示算法运行时间.从图中可以看出, 随着最近邻居数目的增加, 2种算法产生推荐所需要的运行时间都在增加, 但聚类算法的运行时间远远小于不聚类算法.因为不聚类算法需要计算目标用户与系统中所有用户的相似性, 而本文提出的基于Logistic函数和用户聚类的协同过滤算法先在离线情况下对用户聚类, 然后在线计算目标用户与类内其他用户的相似性, 缩小了查询范围, 推荐效率显著提高.

图 4 采用不同方法产生推荐所需的运行时间 Fig. 4 Runtime needed to produce recommendation using different methods

为了进一步说明本文算法对数据稀疏性问题的改善效果, 将本文算法与传统的基于用户的协同过滤算法(user-based collaborative filtering recommendation algorithms, UBCF)、基于项目的协同过滤算法(item-based collaborative filtering recommendation algorithms, IBCF)以及文献[18]中提出的基于用户聚类和项目聚类的协同过滤算法进行比较, 实验结果如图 5所示, 图中A表示准确率.由图 5可以看出, 由于评分数据的稀疏性, 基于评分数据的协同过滤算法推荐效果并不理想, 本文所提出的算法明显优于另外3种基于评分数据的协同过滤算法.

图 5 采用不同协同过滤算法的推荐准确率比较 Fig. 5 Comparison on recommendation precision using different collaborative filtering methods
3 结语

(1) 利用调用数据代替评分数据, 由于调用数据不需要用户进行额外反馈, 比评分数据更易获得, 因此稀疏性较小, 能得到更好的推荐效果.

(2) 引入Logistic函数模拟用户对服务的兴趣与调用次数之间的非线性关系, 生动地反映出用户兴趣的非线性变化过程.

(3) 提取服务关键词, 根据用户对服务的调用次数来计算用户对服务关键词的偏好度, 进行用户聚类.在目标用户所在聚类中寻找其最近邻居, 大大缩小了搜索范围, 提高了算法的推荐效率.

该方法能够利用调用数据进行有效推荐, 并保证推荐效率.但当调用次数也稀疏时, 推荐效果会受到影响, 若用户没有调用过任何服务, 则本方法也不能预测该用户的兴趣并为之进行推荐.下一步工作将结合基于语义内容的推荐, 进一步解决稀疏性问题.

参考文献
[1] SCHOLZ M B, FORMAN G, PAN R. Collaborative filtering model having improved predictive performance: US Patent 9, 355, 414[P]. 2016-5-31.
[2] YANG X, WU J, DANG Y, et al. A product recommendation approach based on the latent social trust network model for collaborative filtering[C]// 2016 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS-C). Vienna: IEEE, 2016: 178-185.
[3] 王海艳, 杨文彬, 王随昌, 等. 基于可信联盟的服务推荐方法[J]. 计算机学报, 2014, 37(2): 301–311.
WANG Hai-yan, YANG Wen-bin, WANG Sui-chang, et al. A service recom-mendation method based on trustworthy community[J]. Chinese Journal of Computers, 2014, 37(2): 301–311.
[4] PAPAGELIS M, PLEXOUSAKIS D, KUTSURAS T. Alleviating the sparsity problem of collaborative filtering using trust inferences[M] //International Conference on Trust Management. Berlin Heidelberg: Springer, 2005: 224-239.
[5] 邓爱林, 朱扬勇, 施伯乐. 基于项目评分预测的协同过滤推荐算法[J]. 软件学报, 2003, 14(9): 1621–1628.
DENG Ai-lin, ZHU Yang-yong, SHI Bai-le. A collaborative filtering recommendation algorithm based on item rating prediction[J]. Journal of Software, 2003, 14(9): 1621–1628.
[6] KALELI C. An entropy-based neighbor selection approach for collaborative filtering[J]. Knowledge-Based Systems, 2014, 56: 273–280. DOI:10.1016/j.knosys.2013.11.020
[7] HATAMI M, PASHAZADEH S. Enhancing prediction in collaborative filtering-based recommender systems[J]. International Journal of Computer Sciences andEngineering, 2014, 2(1): 48–51.
[8] EL ALAMI Y E M, NFAOUI E H, El BEQQALI O. Toward an effective hybrid collaborative filtering: a new approach based on matrix factorization and heuristic-based neighborhood[C] // Intelligent Systems and Computer Vision (ISCV). Hong Kong: IEEE, 2015: 1-8.
[9] RUSSELL S, YOON V. Applications of wavelet data reduction in a recommender system[J]. Expert Systems with Applications, 2008, 34(4): 2316–2325. DOI:10.1016/j.eswa.2007.03.009
[10] SARWAR B, KARYPIS G, KONSTAN J, et al. Application of dimensionality reduction in recommender system-a case study[R]. Minneapolis: US Minnesota University Minneapolis Department of Computer Science, 2000.
[11] DAKHEL G M, MAHDAVI M. A new collaborative filtering algorithm using K-means clustering and neighbors' voting[C]// International Conference on Hybrid Intelligent Systems. Melacca: IEEE, 2011: 179-184.
[12] LI Y, MENG X F, LIU J, et al. Study of the long-range evolution of online human-interest based on small data[J]. Journal of Computer Research and Development, 2015, 4(4): 779–788.
[13] LIU J, SUN P, NI H. Estimation of user interestdegree based on neural network[J]. Computer Engineering, 2011, 7(7): 187–189.
[14] 金海金. 基于用户行为及语义相关实时更新的用户兴趣模型[D]. 成都: 西南师范大学, 2005.
JIN Hai-jin. The user interests model with real-time updated user interests based on user behaviors and similar semantic[D]. Chengdu: Southwestern NormalUniversity, 2005.
[15] CHAOBO H E, SHEN Y, JIANHUI Y U, et al. A recommender system based on historical usage data for Web service discovery[J]. IEEE Transactions on Consumer Electronics, 2012, 6(1): 51–63.
[16] SU X, KHOSHGOFTAAR T M. A survey of collaborative filtering techniques[J]. Advances in artificial intelligence, 2009(12): 4.
[17] HOFMANN T. Latent semantic models for collaborative filtering[J]. ACM Transactions on Informatiotems (TOIS), 2004, 22(1): 89–115. DOI:10.1145/963770
[18] GONG S. A collaborative filtering recommendation algorithm based on user clustering and item clustering[J]. Journal of Software, 2010, 5(7): 745–752.