基于标签的推荐系统

一、基于图模型的推荐

在不考虑标签时,基于二项图有两种随机游走的图推荐算法:

1.probability spreading

随机游走算法,在游走中,每个目标得到权重是基于归属者的边计算出来的。

每次传播(item->user->item)后用户Ui的兴趣向量:

$$f_j^p=\sum_{l=1}^{n}\sum_{s=1}^{m}\frac{a_{lj}a_{ls}a_{is}}{K(U_l)K(I_s)},j=1…m$$

2.heat spreading

规则与ProbS相反,在游走中,每个目标得到权重是基于自己的边计算出来的。

每次传播后用户Ui的兴趣向量:

$$f_h^p=\frac{1}{K(I_j)}\sum_{l=1}^{n}\sum_{s=1}^{m}\frac{a_{lj}a_{ls}a_{is}}{K(U_l)},j=1…m$$

其中:

$$K(I_j)=\sum_{l=1}^{m}a_{lj}$$

是节目j的邻域大小,

$$K(U_l)=\sum_{l=1}^{n}a_{ls}$$

是用户l的邻域大小。

$a_{ij}$是表示用户i和物品j之间是否有边存在的二元向量。

相比之下,Heats算法倾向于降低热门item的权重,而Probs中与增强对热门item的推荐。

 

在随机游走算法的基础上,有基于三分图的标签推荐算法:

NewImage

图中,用户i的每个item的权重(1 or 0)会同时像用户和标签进行传播,这样每次传播后的兴趣向量:

2014-11-17    
Google在KDD2013上关于CTR的一篇论文

最近在做CTR,刚好Google在KDD发了一篇文章,讲了他们的一些尝试,总结一下:

先是一些公式的符号说明:

[image][1]

一、优化算法

CTR中经常用Logistic regression进行训练,一个常用的Loss Function为

image

Online gradient descent(OGD)是一个常用的优化方法,但是在加上L1正则化后,这种方法不能产生有效的稀疏模型。相比之下 Regularized Dual Averaging (RDA)拥有更好的稀疏性,但是精度不如OGD好。

FTRL-Proximal 方法可以同时得到稀疏性与精确性,不同于OGD的迭代步骤:

image

其中$\eta_t$是一个非增的学习率

FTRL-Proximal通过下式迭代:

image

 

参数$\sigma$是学习率,一般我们有 ${\sum_{s=1}^t\sigma_s=\frac{1}{\eta_t}}$。

更新公式:

image

算法如下:

image

这里多个一个 $\lambda_2$ 是一个L2正则化参数。

二、学习率

$$\displaystyle \eta_t=\frac{1}{\sqrt{t}}$$

由于在求解时,这样,对每一个坐标我们都使用了同样的参数,这样一些没有使用的坐标的参数也会下降,显然这不太合理。

一个近似最优的选择是:

imageg是梯度向量

 

三、存储空间

1.特征选择

在CTR中,跟多特征仅仅出现了一次(In fact, in some of our models, half the unique features occur only once in the entire training set of billions of examples),这样特征几乎没有什么用,但是存储起来非常浪费空间。L1正则化虽然解决了一些问题,但是这样降低了一些精度,因此另一个选择是

2013-08-03    
[转] Deep Learning(深度学习)学习笔记整理系列
转一套深度学习的资料
2013-04-26    
决策粗糙集

今天收拾资料,发现了以前刚接触粗糙集时写的一个综述,好久没写博客,发上来充数好了

一、粗糙集模型1

粗糙集是Pawlak于上世纪八十年代提出的一种不确定数学模型。该模型以有限集合上的等价关系为基础,定义了上下近似两个基本操作。该模型与它的其他一般化或变种形式有着较为广泛的应用。

1.1Pawlak粗糙集模型

Pawlak粗糙集模型是以一个有限集合与集合上的一个等价关系为基础的。所谓的二元等价关系是一种满足自反性,对称性和传递性的关系的二元关系。因为这些性质,一个二元等价关系将一个集合分割成一到多个互不相较子集,形成了集合的一个分割,记为U/R,其中的元素与他们的并被称为精确集。

在这一基础上,Pawlak提出了近似的概念,所谓近似,是通过一个已有集合U的一个分割中的集合的并集对一个U的任意子集X进行逼近,作为X的近似。包括上近似于下近似两种。如,设R是U上一个等价关系,则,X的上下近似分别为:

通过2中近似,我们可以把U分为三个部分,分别称为正域POS(X),边界域BND(X),和负域NEG(X),这三个域都是U/R上一些集合的并,也就是可以用R精确表示的精确集:分别表示一定属于X,可能属于X,和一定不属于X三种定义。

进一步的,对于任意两个等价关系R,D定义:

可以证明的是,在Pawlak粗糙集模型中

1.2变精度粗糙集模型(VPRT)2

在原有粗糙集模型的基础上,又可以引入变精度粗糙集的概念,变精度粗糙集通过引入一个精度参数,定义,重新定义正域为,边界域为,负域为

2013-04-25    
R语言系列—-区间估计

这一篇讲的是区间估计…..因为这不是一个关于统计学的系列,所以对文中出现的公式不会给予任何证明…..就是这样。

就从一个最简单的正态分布的方差已知时,求均值的置信区间开始吧。

书上的公式告诉我们这个区间是 $$\overline{x}\pm(\sigma/\sqrt{n})z_{(1-\sigma/2)}$$ ,其中Zp表示的是正态分布N(0,1)下侧的p分位数。

我们用R来实现求得这一结果的过程。下面设x里存储了给出的样本,sigma表示已知的方差,n表示样本的个数, alpha则是(1-置信水平)

mean<-mean(x)
ans<-c(mean-sigma*qnorm(1-alpha / 2)/sqrt(n) , mean+sigma*qnorm(1-alpha / 2)/sqrt(n))

这样,ans就存储了要求的置信区间。

来解释一下吧,先用mean(x)求出样本的平均值,然后用qnorm(1-alpha / 2)求出Z1-a/2,(还记得么?前缀q是分位数函数,)剩下的就是套公式的加减法了。

这里的qnorm(1-alpha / 2)其实省略了很多参数,完整一些的写法是

qnorm(1-alpha/2,mean=0,sd=1,lower.tail=TRUE)

第一个参数就不用解释了,第二,三个参数mean=0,sd=1,表示这是一个标准正态分布(不同于前面,这里增加了mean=和sd=,这种做法的好处是可以改变参数的顺序,但是结果是一样的),最后一个参数lower.tail这个参数的意思就比较有意思了,官方解释如下:

if TRUE (default), probabilities are $P[X <= x]$, otherwise, $P[X > x]$.

明白了么?等于真的话,得出的就是X<=x的分位数,为假的话就是从X>x的方法寻找这个值。一般我们用默认的真就可以了。

2012-06-30    
R语言系列—-数据描述

简单来说,R语言是一种主要用于统计分析、绘图的语言和操作环境。的源代码可自由下载使用,亦有已编译的执行档版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。R主要是以命令行操作,同时有人开发了几种图形用户界面。

       为什么我会使用R语言呢?毕竟我们还有SPSS,SAS,S等其他工具。就我个人而言(其实对很多人也是这样)有两个原因—-R的开源与其极高的自由度。

R是开源的,是属于GNU系统的一个自由、免费、源代码开放的软件因此在使用它时我们不用担心使用的资格问题。(当然对人一般人来说其他软件也可以使用盗版…起码国内是这样)另外作为一种语言,R拥有极高的自由度—-对于,很多新的统计学模型,也许SPSS等软件根本无法处理—你只能使用系统提供的有限选项。但是在R语言中,你可以自己去实现它。这也是学术界对R如此关注的原因。

敲了这么多废话,进入正题。

这一篇的内容是数据描述,就冲R中内嵌的一些简单分布开始吧。

R语言中提供了四类有关统计分布的函数(密度函数,累计分布函数,分位函数,随机数函数)。分别在代表该分布的R函数前加上相应前缀获得(d,p,q,r)。如正态分布的函数是norm,命令dnorm(0)就可以获得正态分布的密度函数在0处的值(0.3989)(默认为标准正态分布)。同理pnorm(0)是0.5就是正态分布的累计密度函数在0处的值。而qnorm(0.5)则得到的是0,即标准正态分布在0.5处的分位数是0(在来个比较常用的:qnorm(0.975)就是那个估计中经常用到的1.96了)。最后一个rnorm(n)则是按正态分布随机产生n个数据。上面正态分布的参数平均值和方差都是默认的0和1,你可以通过在函数里显示指定这些参数对其进行更改。如dnorm(0,1,2)则得出的是均值为1,标准差为2的正态分布在0处的概率值。要注意的是()内的顺序不能颠倒。

2012-06-30    
R语言系列—回归分析

**         **一元线形回归模型:有变量x,y。假设有关系y=c+bx+e,其中c+bx 是y随x变化的部分,e是随机误差。

可以很容易的用函数lm()求出回归参数b,c并作相应的假设检验,如:

x<-c(0.10, 0.11, 0.12, 0.13, 0.14, 0.15,0.16, 0.17, 0.18, 0.20, 0.21, 0.23)
y<-c(42.0, 43.5, 45.0, 45.5, 45.0, 47.5,49.0, 53.0, 50.0, 55.0, 55.0, 60.0)
lm.sol<-lm(y ~ 1+x)
summary(lm.sol)

仅列出部分返回结果:

Residuals:

  Min       1Q   Median    3Q     Max

-2.0431  -0.7056  0.1694  0.6633  2.2653

Coefficients:

            Estimate Std. Error      t value   Pr(>|t|)

(Intercept)   28.493      1.580   18.04    5.88e-09 ***

x            130.835      9.683   13.51 9.50e-08 ***

在我们的输入中,关键是lm.sol<-lm(y ~ 1+x)的调用,这里可以看到,lm使用了参数y~1+x,即表示我们使用的是模型y=c+bx+e (1表示常数项)

然后我们使用summary查看了lm返回的结果。在Residuals:中,我们可以看到的是一些关于残差的信息:最小最大值,4分位数等。Coefficients:中则是最为关键的对c和b的相关估计。其中Estimate是与b,c值的估计,Std. Error 则是回归参数b和c的标准差:sd(b), sd(c)。剩下的两个参数则是对回归参数的假设检验: t value是对b,c进行假设检验的t值,以及P-值(用来与显著性水平比较决定是否接受该阿假设检验)Pr(>|t|)。最后我们还可以看到3个* 号,这表明x和y有非常显著的线性关系(*可以有0—3个,越多则线性关系越显著)。

2012-06-30    
简单讲一下使用MS3D为opengl建模

做毕设的时候写的东西,贴上来吧…………

由于在OPENGL只能通过程序语言绘制模型,远不能达到可见既可得的目的。因此,比起3DMAX、MAYA等可视化3D建模工具,OPENGL模型的建立就相当的困难,为了简化这一问题的处理,可以使用简单小巧的MS3D来完成可见即可得的绘制过程。

MS3D的文件有着非常简单良好的文件结构,可从该文件中完美读取在可视工具中绘制的3D图形模型包含的点、线、面等各项基本结构的参数与位置,并在OPENGL根据读取结果即可进行绘制重现该模型。

MS3D全名为MilkShape3D,是一款简单小巧的3D可视化图形建模工具,可以简单的使用各种点、线面等基本图形元素组合建立模型,并进行贴图,分组。进一步的,该工具还支持简单的骨骼动画制作,是一款非常好用的3D图形构建工具。

[ms3d][1]

在建立了MS3D中完成模型建立后可保存为.ms3d的文件格式,通过对该文件格式进行分析,就可以了解文件结构,以在程序中通过读取该文件重现所见模型。

该文件依次包括6段信息,除第一段文件头外,其它每段的开始位置都记录了该段中元素的数目,可用于计算该段的具体大小。

  • 文件头:大小固定为14字节。前10个字节为固定的标志 MS3D000000<-其中后6个字节就是字符0(即值为48)后4个字节为该模型格式的版本号,这4个字节为一个有符号整数,目前该版本号的值为3或4,两种版本的格式细节不同。

2011-03-16    
算法总结9—优化

不同于之前的分类和聚类算法,优化的目的是尝试找到一个使成本函数输出最小化的值。这里主要包括两个算法:模拟退火算法和遗传算法。

成本函数:
接受一个经推测的题解,并返回一个数值结果,该值越大代表成本越高(题解表现越差),该值越小就表示题解越好。

模拟退火算法:

优化算法的目标可以看为寻找x使函数f(x)最小。

但是严格的最小值往往是很难达到的,我们不得不把眼光投入到寻找一个尽可能好的次优解去。

最简单的方法被称为随机法,即成千上万次的对x进行猜测,然后把这些x中使f(x)最小的一个作为答案。虽然这样很简单,但是效果很差。于是出现了爬山法。

爬山法从一个随机解出发,然后不断向该解附近的使f(x)的值更小的x移动,直到当前x附近的解都比x差为止。为了使效果更好,我们可以从多个随机解出发重复着一个过程,将最好的一个作为答案。很容易就能认识到,这样找到的解是一个极值点,是一个局部最小值。

爬山法虽然好,但是在其寻找最优解的过程中,前进的方向是固定的(使f(x)更小的方向),但是有时向其他方法前进也是必要的,因为f(x)可能先增大在变小成为最优的。

于是就有了模拟退火法。

该算法这源于固体的退火过程,即先将温度加到很高(大量原子被激发),再缓慢降温(即退火),则能使达到能量最低点。如果急速降温(即为淬火)则不能达到最低点。

2009-09-30