SSH框架搭建和最简单的SSH整合实例

在Myelipse下整合struts2、Spring2.5和Hibernate3.2。使用数据库Mysql。

不需要自己添加框架的包,但是因为使用了Mysql,所以要自己添加Mysql的驱动包。mysql-connector-java-5.1.5-bin.jar

最好的方法是直接把下面的包复制到lib目录下:

http://download.csdn.net/detail/shinepengwei/4740166

或者,使用myeclipse自带的兼容配置,步骤如下:

添加Struts2:右键点击Web Project,在Myelipse里面选择Add struts Capablities.

这样的话已经成功的导入了SSH框架需要的所有JAR包,然后把我代码复制进去。

这样的话还会出现问题,首先由于JAR包的冲突,出现下面的问题:

要把cblib-2.1.3包删掉。

还会出现没有mysql驱动的问题,然后把下面这个包复制进去就行了。

最简单的SSH实例代码:

我只写了一个最简单的功能:用户输入用户名和密码进行注册。

下载地址:http://download.csdn.net/detail/shinepengwei/4740305

中间遇到了几个问题:

1 Action和do的问题

我们为struts设置的URL的模式为.do,但是仅在Web.xml里面设置以下代码是不够的:

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>*.do</url-pattern>

</filter-mapping>

我们还需要在设置struts的property。

可以在properties文件,或者constant标签。

如我们的例子,在properties中,struts.action.extension=do,action

2 spring依赖注入为null

注意,我们在spring的applicationContext.xml中设置了bean,在struts.xml中的class要设置为对应的bean id。

下面的代码就会出现错误,要与spring里面的bean对应而不是对应于类。

Published: 14 Dec 2012

因子分析及EM的应用

因子分析(factor analysis)是一种数据简化的技术。它通过研究众多变量之间的内部依赖关系,探求观测数据中的基本结构,并用少数几个假想变量来表示其基本的数据结构。这几个假想变量能够反映原来众多变量的主要信息。原始的变量是可观测的显在变量,而假想变量是不可观测的潜在变量,称为因子。

1 问题

在我们以前在混合高斯模型中使用EM算法时,都认为我们有足够数量的样本来找到高斯分布,比如一般认为训练样本数量m远大于样本空间维度n。但是如果n大于或等于m时,使用原来的方法就无法获得结果。比如,我们希望从数据中构建一个单高斯分布模型(比混合高斯分布要求更少的数据),通过使用以下公式获得高斯分布的参数:

计算发现,∑是奇异矩阵,因此就无法计算高斯分布的概率分布。因此,无法使用极大似然估计的方法构建高斯模型。

如下图,我们在二维空间上有两个样本,对其进行高斯建模后获得的模型就是一个非常长,非常窄的高斯模型,几乎就像一条直线。可以理解为高斯模型认为样本较大概率落在两点间的直线上。

2限制∑

有上面的分析可以看出,无法构建高斯模型的原因主要是因为计算出来的∑是奇异的。那我们可以对其进行一些假设和约定,可能获得一些比较好的高斯模型。

我们可以约定∑是对角矩阵。也就是说,各特征之间互相独立,我们只需要计算各特征的方差即可,非对角线元素为0。

高斯分布的密度曲线是椭圆的,如果∑是对角矩阵,则这些椭圆的轴与横纵坐标平行。如下图所示

我们进一步对∑进行限制,我们不仅要求 是对角矩阵,还要求对角线上的元素相等,即∑=σI。

对于上面的那个例子,我们获得的密度曲线如下,密度曲线是一个圆形:

然后,对参数∑的限制同时代表着我们认为样本的不同特征向量之间是没有相关的互相独立的,但我们往往想从样本中发现不同特征向量之间的关联关系。

下面,我们将描述因子分析模型,该模型使用更多的参数来发现特征间的相关性,并且不需要计算完整的∑。

3 边缘高斯分布和条件高斯分布

在介绍因子分析模型之前,先介绍下多元高斯分布中的边缘分布和条件分布。

假设,随机变量向量x可分为两个向量:

假设,x~N(u,∑),

(推导过程不介绍了)结论:

多元高斯分布的边缘分布仍然是高斯分布:x1~N(u1, ∑11)

条件分布:x1|x2~N(u1|2, ∑1|2).

4 因子分析模型的思想和举例

下面我们通过一个例子说明因子分析的思想。

在因子分析模型中,我们认为m个n维空间特征的样本x(i)(x1(i),x2(i),….xn(i))的产生过程如下:

l 首先在一个k(k<n)维空间特征下产生m个样本:z(i),同时z(i)~N(0,I)。

l 然后通过一个变换矩阵A(n*k维矩阵),将z(i) 映射到n维空间,即A*z(i)。

l 然后在A*z(i)基础上加上均值μ(n维),即μ+A*z(i)。

l 在真实空间中,现实数据和模型相比往往具有一些误差和噪音,我们认为这些误差也是高斯分布。e~N(0,φ),u+A*z(i)+e

l 经过这些变换,才是我们的真实的样本x(i)=μ+A*z(i)+e

下面以图例解释上述步骤,假设我们有m=5个2维样本x(i),即两个特征。

1. 首先我们认为在1维空间,存在正态分布的5个z(i)。均值为0,方差为1。

2. 然后使用某个A=(a,b)T将一维的z映射到2维,图形表示如下

3. 加上μ(μ1,μ2)T,即将所有点的横坐标移动μ1,纵坐标移动μ2,将直线移到一个位置,使得直线过点μ,原始左边轴的原点现在为μ(红色点)。

4. 然而,显示和模型相比会有一定偏差,因此我们需要将上步生成的点做一些扰动(误差),扰动e~N(0, φ)。加入扰动后,我们得到黑色样本x(i)如下:

其中由于z和e的均值都为0,因此μ也是原始样本点(黑色点)的均值。由以上的直观分析,我们知道了因子分析其实就是认为高维样本点实际上是由低维样本点经过高斯分布、线性变换、误差扰动生成的,因此高维数据可以使用低维来表示。

5 因子分析模型

根据上一节的解释,我们定义因子分析模型为隐含随机变量z经过随机变换和扰动得到的样本x,其中z就是因子,维度比x更低:

定义z和x的联合分布为联合高斯分布:

计算两个参数,(计算过程略)可知

根据上式和我们对边缘高斯分布的定义和推导可知:x~N(u, AAT+ φ)。

因此,对于一个训练集,似然估计为

为进行最大似然估计,我们希望分别根据三个参数对上式求最大值。但是无法求上式的最大值(我反正不想试。。。)。因此使用EM算法。

6 EM算法在因子分析的使用

因子分析的原理理解了,如何去求解因子分析我认为不是最重要的,这里是使用EM进行求解。

初始化三个参数;

循环重复直至收敛{

(步骤E)对于每一个i(样本),计算:

(步骤M)针对三个参数最大化:

}

Published: 03 Nov 2012

主成分分析

主成份分析(principal component analysis,PCA)算法和因子分析算法有些相似,都是在低维空间上表示高维空间的数据。但是主成份分析算法更加直接,直接去寻找高维特征之间的依赖关系,从而达到降维的目的。

比如在一个对飞行员的调查中,skill和enjoyment之间有一定的依赖关系,因此我们可以试用u1(飞行员资质)这一个特征来表示前面的那两个特征,u2可能代表着一定的误差。

1算法

1.1数据的预处理

在使用主成分分析对数据降维前,由于各特征值的物理意义不同,因此要对其进行预处理。

1.2 找到数据位置的方向

数据处理以后,下一步就是找到数据位置的大概方向,或者说单位向量u。我们希望样本数据在这个方向上的投影的方差(variance)最大化,或者说样本数据离这个方向的直线距离最短。物理意义:方差较大可以获得更多的信息?

样本x在方向u上的投影到圆点的距离为xTu,为了最大化投影的方差,我们希望找到单位矩阵u使下式最大化。

,而u为单位向量,则上式的最大值代表着∑的非特征值,u代表着主特征向量(特征值最大的特征向量)。

从上面分析,为了获得1维的子特征空间,就去找最大特征值的特征向量。那如果找k-维的子空间,只需要去找top-k特征值的特征向量u1,u2,…uk。

注:因为∑是对称的,所以这些特征向量是正交的。

找到了k个特征向量,我们就可以在k维空间上表示原高维空间的样本x(i):

由上可见,PCA算法是一个降维算法,我们找到的k个特征向量u1,u2…uk成为主成分。

1.3 算法

总结以上内容可见,PCA算法分为三步:

1 预处理

2 计算

3 找到∑的k-top特征向量

2 CPA的应用

CPA可用于多种目的,比如

  • 数据压缩:降维
  • 可视化:把特征压缩到2或3维空间爱你
  • 机器学习中通过降维防止过拟合。
  • 匹配/距离计算:在子空间计算两点的距离。

2.1 Latent semantic indexing(LSI)

将CPA算法应用在文本处理中,如对于一个文本,首先创建其向量字典:

这里一般省略预处理阶段。

若我们希望比较两文本x(i)和x(j)的相似性,比如我们使用两文本的字典向量的内积表示。

对于两个只含有一个单词的文本:"study"和"learn",字典也仅含这两个单词(2维空间),那如果仅仅计算内积,则相似度为0。

但如果将2维空间变为1维,映射到主成分上,则发现他们之间仍具有一定的相似性。

3 CPA的实施

在使用CPA算法时,若原特征空间为10000,则∑为10000*10000维,计算量非常大。

因此,可以使用奇异值分解的方法简便的计算。

对于训练集{x(1,x(2),…x(m))},令:

则∑=XTX

因此,V的top-k列就是∑=XTX的top-k特征向量。X=UDV。

SVD性质:

4 算法的比较

密度估计算法 非概率算法
数据可用子空间表示 因子分析(异常分析) 主成分分析(降低维度)
数据可分为块或团 混合高斯模型 K-means

Published: 03 Nov 2012

EM算法

上一节中介绍了Em算法在混合高斯模型中的使用,这一节中介绍的是更概括的EM算法,上节中的算法是这里介绍的一个特例。

1 Jensen不等式

如果f是个凹函数,令X是一个随机变量,则E[f(x)]>=f(EX).

同理,对于凸函数,则E[f(x)]=< f(EX).

2 EM算法

对于一个训练集X,有一个模型P(x,z|?),只能观察到x,希望获得参数?使训练集的极大似然估计最大:

????

由于z是未知的,所以找到极大似然估计比较困难,但是如果z是已知的,就比较简单了。

EM算法的思想是直接使l(?)可能比较困难,那我们首先重复的构建l的下界(E-step),然后找到下界的最优值(M-step)。

对于每个样本xi,令Qi为z的分布。则:

????

第二步到第三部使用了jensen不等式。这样就得到了(3)式中的不等式。

对于(3)式,任何分布Qi都给出了l(?)的下界。如果已经给定了参数?,若使(3)式中的不等式为等号,则下界和函数l相切。即获得jensen不等式中的等号,则令

(常数)

因此,我们根据(3)式选择了一个较好的Qi,这是步骤E。

在步骤M中,我们给定Qi根据参数?最大化(3)式,获得了一个新的参数?。

重复步骤E和步骤M,就是EM算法:

?

EM算法可以下图表示:首先随机设定一个?0,然后找到函数l(?)的下界,这是步骤E。然后在下界中找到最大值获得参数?1。以此类推就可以获得l(?)的最大值。

可以这么理解,定义函数J(?,Q)为l(?)的下界:

为求出l(?)的最大值,在步骤E中,?不变,改变Q使J(?,Q)最大。在步骤M中,Q不变,改变?使J(?,Q)最大。

注:为什么使用EM算法而不是直接求出l(?)的最大值呢,因为EM算法中的所有表达式都是可以计算的,而无法计算l(?)的最大值。

?

3 EM算法在混合高斯模型中的应用

在步骤E中,我们仅需要计算:

由贝叶斯规则可以进一步的得出:

根据我们的假设,x|z=j~N(u, ∑),z~Multinomial(φ),就可以计算出上式结果。

在步骤M中,我们需要根据参数φ,u和 ∑使下式最大化

只要针对三个参数分别求出使上式取最大值的参数即可。如计算u时只要求上式导数并置为0即可。具体的求解步骤这里不详述。

4 EM算法用于朴素贝叶斯分类

朴素贝叶斯中,我们的训练集是已经被分类好的,而我们用朴素贝叶斯分类器对一个新的对象进行分类。

而在聚类中,我们不知道训练集的分类,比如Google中的news模块,他是对所有最新抓到的news网页进行聚类,每一类中选一个news进行推荐。我们称为混合朴素贝叶斯。

训练集X={x(1), x(2).. x(m)},x(i)={0,1}^n。x(i,j)表示第j个单词出现在文档i中。

Z(i)={0,1},我们假设只有两个分类。

,

初始化:随机设置参数。

以下公式是根据EM算法的公式进行推导得到的,和朴素贝叶斯的推导过程应该是一样的。

E-step:

M-step:

E-step:

?

?

?

?

Published: 30 Oct 2012

密度估计-混合高斯分布和EM算法

密度估计就是计算样本空间某区域内的密度,即可以估计出一个新的点落入这个区域的概率,或者说对于一个点这个点出现的概率(如不正常发动机检测)。混合高斯模型就是描述这种密度估计的概率模型,此节中我们讨论EM(最大似然算法)算法 在密度估计方面的应用。

对于无监督学习的一个训练集{x(1),x(2),…x(m)},混合高斯模型是通过引入一个隐含(latent)的随机变量z(i)来描述x(i)可能属于某一个高斯分布。与监督学习算法GDA模型中的硬指定不同,z(i)在这里也是随机变量,我们假设他服从多项式分布。

P(x(i),z(i))= P(x(i)|z(i)) P(z(i)),其中,x(i)|z(i)=j服从高斯分布N(uj,∑j),z(i)属于多项式分布Multinomial(φ)。

对于给定参数u,∑和φ,我们数据的似然估计是:

加入我们已经知道了z(i)是什么(其实是一个随机变量),以下参数可以使似然度最大化:

其实,如果z(i)给定的话,最大似然估计和我们估计GDA模型的参数的方法几乎相同,不同点如下:我们使用z(i)表示点的label,而不是y(i);对于不同的高斯分布,混合高斯模型中的不同高斯分布的协矩阵不同。

然而,我们以上的结论是基于z(i)给定,而在我们的问题中z(i)是未知的。

可以使用EM算法。EM算法是一个包含两个步骤的迭代算法,在步骤E中,首先尝试猜测z(i)的值。然后在步骤M中,根据猜测到的z(i)更新模型参数,使似然最大。

在步骤E中,可以使用贝叶斯规则计算Z(i)的概率:

在步骤E中,我们并没有计算出z(i)的值,而是计算z(i)的概率,在步骤M中,使用概率来表示个数,这个应该还是比较好理解的。

与k-means聚类算法相比,EM的结果不是一个"硬的"聚类结果,而是属于某一类的概率。

K-means和EM算法的关系

问题:将样本X分为k个类。K-means是通过为x硬指派一个类别c,而EM算法计算x属于某一个类别z的概率。

直白地说,聚类问题就是为样本分配隐含类别c/z。两个算法都是通过迭代的方法,每一次迭代分为两步。

对于EM算法,我们首先假设样本X的隐含类别为z,并通过度量样本的极大似然估计来评价,也就是联合分布p(x,z)。但随机指定的z不一定使p最大,因此我们调整参数使p最大。调整参数以后,我们可能会发现更好的y的指定,然后我们重新指定y,然后在计算使p最大的参数。如此迭代。

对于k-means算法,我们首先将随意选择聚类中心点,然后根据样本离那个中心点最近将样本分配给该类别(概率最大),即样本属于该类别的可能性最大。然后重新计算聚类中心点,然后再分配样本。

由上可知,EM算法和k-means算法思想上有一定的相似性。

Published: 29 Oct 2012

K-means聚类算法

k-means聚类算法是一种无监督学习,无监督学习和有监督学习的区别是有监督学习的原数据有一个标签(label)y,而无监督学习仅仅是一系列的训练集{x1,x2,…xm}。

K-means聚类算法的思想是:首先确定要聚类为k个类,并随机初始化k个聚类的中心点,这些中心点代表着当前步骤中属于该类的训练元素的中心点。然后在每一步中计算属于当前中心点的类的训练集元素,然后根据这些元素更新相应的中心点。

正式定义的算法如下:

下图是收敛过程的例子

收敛问题

K-means算法是确定收敛的,我们可以定义函数J:

k-means算法希望使函数J的最小化,而在收敛过程中,函数J不断减小,一旦函数J不变,则k-means算法完成。

函数J不是一个凸函数,因此K-means不能保证全局最优,可以尝试使用多次K-means算法,然后找到一个最优值。

使用k-means算法时,首先要选择聚类数量,有一些算法可以自动选择类的数量,在使用k-means算法时,可以随机选择类的数量,多次运行算法,然后找到一个最合适的数量。注:类的数量一般来说比较模糊。

Published: 29 Oct 2012

Location-based Preference-Aware Recommendation Using Sparse Geo-Social Networking Data 笔记

此文章的推荐考虑了1用户个人偏好和2社会意见。该推荐系统包括两个方面:离线建模和在线推荐。在离线建模模型中系统使用weighted category hierarchy(WCH)对用户的访问历史进行建模,并且针对每个城市的每个类型(category)的位置推断出每个用户的专家值(expertise)。在在线推荐模块,首先通过偏好感知的候选选择算法找到本地的专家和此用户当前位置区域的item,然后根据本地专家的意见计算打分并获得最终评价。

稀疏性是推荐的一个很大的困难,尤其到了一个新的城市,用户的历史轨迹可能非常少,对推荐造成了更大的困难。为了解决这种问题,文中通过位置历史的类型对用户偏好建模,这样可以利用在地理空间和用户没有关系的其他用户的历史信息。

1 想法

本文数据上使用的用户是来自一个城市的,但是在算法中并没有考虑用户的地域性,文中也提及使用所有城市的数据建模。而在另一篇文章中说明,不同地域的人偏好不同。是否可以同时考虑本地的专家和外地的专家,本地专家(即生活在本地)对本地更了解,而外地的专家(与用户来自于同一城市,来旅游等短暂停留,本文中没有考虑,但是数据中使用的就是外地的专家)和用户的偏好可能更相同。

本文主要是解决了稀疏性的问题。

同一个城市不同地区可能有不同的专家,可以在专家发现时引入位置的层次模型。

2 系统介绍

下图介绍了系统中的重要的数据结构以及他们之间的关系,包括用户、地点、签到、用户位置历史、位置的层次结构类型(category hierarchy),如图所示。

系统架构如下图

3离线建模(图中左下)

分为两个模块,社会知识挖掘(social knowledge learning)和个人偏好发现(personal preference discovery)。

3.1社会知识挖掘

该模块针对每一个城市中的每一个位置类型推断用户的专家值expertise。首先给定层次类型,然后将每个城市的所有位置历史根据类型将其分组(每个历史可能在不同的父子类型中),然后使用HITS算法计算用户的专家值,然后就能找到城市中的不同类型的本地专家。

3.2个人偏好发现

该模块使用根据用户历史访问位置的类型使用WCH(weighted category hierarchy)对其建模,每个节点的值为用户在此类型的位置中访问的次数,使用TF-IDF表示。

4在线推荐(图中右上)

推荐考虑用户的偏好、当前位置和社会意见,分为两个模块,偏好感知的候选者选取和基于位置的打分。

4.1偏好感知的候选者选取

该模块根据用户偏好选择一组在访问过此区域的本地专家。

4.2基于位置的打分

该模块首先计算本地专家和该用户的相似度,然后根据相似度和本地专家的访问历史对候选位置进行打分,然后生成推荐。

5 实验

实验使用的数据集是Foursquare的数据,分别抓取了在纽约和洛杉矶的签到数据,同时抓取了这些用的其他城市的数据用来做偏好挖掘。同时只考虑带有评论的签到,这样防止用户仅仅是在门口路过。

文章为了更好的模拟用户在一个不熟悉的城市使用推荐系统的效果,使用家乡为New Jersey的用户在洛杉矶和纽约的签到数据(数据中所有的用户来自于同一个城市,更倾向于存在相似的偏好)。

同时,使用以下四种方法用来和我们的方法进行比较:(论文中只使用了小篇幅介绍算法,不太详细,不知道我的理解对不对)

  • Most-Preferred-Category-based(MPC):我的理解是根据用户当前的地理范围和用户偏好WCH,找到每个偏好中最好(authority最高)的位置。(但是我感觉和下表不同,考虑了社会意见,因为authority高的说明其他用户去得也多)
  • Location-based Collaborative Filtering(LCF):根据用户在一个城市的轨迹,构建用户-位置矩阵,使用传统的协同过滤方法对用户选择区域内的位置打分。
  • Preference-based Collaborative Filtering(PCF):首先检索在用户选择的区域内的所有用户和位置,并构建用户-位置矩阵,然后使用user-based协同过滤模型预测用户对未知的打分。用户之间的相似度使用类型向量(category vectors)进行计算。
  • Our method without using 偏好感知的候选者搜索。

准确性(effectiveness)评价方法:将一个用户的历史位置分为两份,一份用来做训练集,一份用来做测试集,根据训练集获得推荐结果然后和测试集比较,使用精度和召回率评价:

虽然这个方法不准确,因为用户没去过一个地方,也可能对这个地方感兴趣,或者用户访问过一个地方但是没有留评论,但是在实验结果中可以看出,本文的方法比其他方法更好。

精度和召回率和以下三个因素有关:请求推荐的数量N、用户历史轨迹数量和用户的请求区域中签到的位置的密度。

性能评价:在线推荐的性能和两方面有关:用户选择的地理范围和用户要求的推荐数量。

在评价准确性时,文章分别针对不同的推荐数量、用户历史位置数量和位置密度对四种方法做了比较,针对不同的推荐数量还将本文提出的算法和不考虑偏好感知候选搜索的算法比较。通过比较证明,文章提出的算法考虑的四个部分都对推荐有一定的作用。同时还根据用户相似度计算是否考虑层次和嫡,证明文中提出的用户相似度公式较好。

实现发现纽约的数据更多,但效果更差,分析并统计说明数据多说明人去得多,偏好可能会更加分散。

实验设置:要根据自己的系统中的各个组件进行实验,然后证明各个组件对结果有积极的作用。对于和尝试不太一样的地方,要分析其原因并尽量通过数据证明。

在评价性能是,文章问对不同的推荐数量和选择的空间区域范围进行比较。同时,还比较了最后一步中涉及到的用户和位置的数量,来说明基于偏好的候选集选择算法的效果:去掉了经验少的用户和质量差的位置。

?

?

?

?

Published: 25 Oct 2012

LARS:A Location-Aware Recommender System 笔记

文章介绍了一个位置感知的推荐系统,将推荐系统分为三类:spatial ratings for non-spatial items, non-spatial ratings for spatial items 和 spatial rating for spatial items。其中spatial rating代表着打分的用户有一个位置属性,既可以理解为哪里打分(移动用户),其实可以理解为用户是哪里人(非移动用户)。Spatial items表示item是一个location,比如餐厅、电影院等。对于spatial rating文中提出了用户划分(user partitioning)的方法,根据用户所属的位置构建CF模型。对于spatial item提出了移动惩罚(travel penalty),即考虑用户现在的位置和推荐的位置之间的距离。

1 想法与思考

该文章中提出的用户划分的方法很容易导致更大的稀疏性,文中使用数据集是找的比较密集的数据。

2 用户划分(user partitioning)

该技术主要解决spatial ratings的问题,对具有地理位置属性的user进行建模。

文章通过对Movielens和Foursquare的数据进行分析后发现,不同的地域的用户有着不同的兴趣,因此提出了兴趣地域性(preference locality)。因此,使用用户划分的方法将用户根据其家的位置划分,推荐时使用该用户的邻居的评价进行计算推荐评分。但是,我觉得该方法会造成更大的评价的稀疏性。

用户划分中使用自适应金字塔结构,将区域分成金字塔型的层次结构,当位置在区域R中的用户请求推荐时,我们仅使用属于R区域内的打分进行推荐。

在构建自适应金字塔结构时,根据scalability和locality的权衡,对区域进行分割或合并,从而获得一个偏(partial)金字塔结构,如右图所示。

因为多创建一个区域就要创建多一个对应的CF模型,从而需要更多的存储空间,因此将区域过分的划分可能带来scalability的问题;而如果不划分,无法体现兴趣地域性,又带来了locality的问题,因此随着两个属性的权衡,就形成了一个偏金字塔的数据结构。

随着新数据的产生,该结构也需要不断的修改,当对于某一个区域获得了N%的新评价时,就需要对其根据scalability和locality进行权衡判断,并进行合并或分割。合并和分割算法文中有详细介绍,我就不介绍了。

3 移动惩罚(travel penalty)

该技术主要对具有地理位置信息的item使用。

文章分析Foursquare发现用户的移动范围一般都较小,因此在推荐时离用户当前位置较近的地方应该优先推荐,并提出了移动惩罚的方法。

文中提出了一种高效的获得离用户当前位置距离最近的k个点的算法。移动惩罚的原理很简单,就是在原有的打分上加上一个惩罚,距离越远,惩罚越大,,P(u,i)表示传统的CF打分(可使用全局的,也可以基于用户划分使用),TravelPenalty(u,i)表示u和i的距离。

为了避免对所有的推荐候选item都计算上式,我们根据移动惩罚的单调递增顺序计算上式,找到最好的k个item。基本原理是假设下一个item是最高评分,剪掉移动惩罚后和待推荐的第k个评分比较,如果都比最小的(k)评分小,则后面就不可能有更大的了,就不用计算了。

同时文章介绍了两种根据移动惩罚增加序列获得item的方法,本文不再介绍。????

4 实验

本文为了评价LARS试用了三个数据集:Foursquare、MovieLens和模拟数据。其实前两个是为了测试推荐的质量,模拟数据是为了测试推荐系统的性能。

4.1 针对不同的金字塔层次的推荐质量

使用Foursquare和MovieLens数据集,比较了传统的协同过滤CF、本文提出的LARS以及只考虑移动惩罚的LARS-T和只考虑用户划分的LARS-U。

MovieLens相当于spatial ratings for non-spatial items,Foursquare相当于spatial ratings for spatial items。

为评价质量,每个数据集中抽出80%作为测试集,另外的20%作为测试集,而且测试集中都是用户评价较高的item。针对每一个测试机中的评价t,根据评价t的用户和用户位置请求推荐结果,评价标准就是推荐结果中含有t的item的次数。

对于Foursquare数据集,测试了四种算法的结果,对于MovieLens,测试了CF和LARS-U,因为movie没有位置信息。

4.2针对不同推荐结果数量的推荐质量

针对不同的推荐结果时,其他参数设置为可导致最好的结果的参数。如在Foursquare中金字塔层次最好的是4,则这里设置为4。而在MovieLens中设置为7,因为从上一个实验中获得的结果7最好。

4.3 Storage Vs. Locality

在用户划分的金字塔模型中,需要权衡scalability和locality来动态适应金字塔结构,因此这里分析Storage(scalability的主要表现)和Locality的关系。

Scalability和Locality的权衡主要根据权重M,文章根据不同的M设计了实验并分析其结果,发现0.3是一个比较好的结果。

4.4 Scalability

比较了针对不同的评价数量所消耗的存储空间和增加了评价所消耗的重构时间。

4.5推荐请求处理时间

对于Snapshot queries,文章比较了不同的方法所消耗的时间,LARS比如LARS_U好,说明基于提前终止的移动惩罚技术可以获得更快的响应。LARS比LARS-T好说明使用用户分类不仅获得更好的推荐质量,推荐速度也有提高。

文章同时还实验说明了Continuous queries的结果。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

Published: 25 Oct 2012