维克多:因子模型

问题定义

因子模型在多维尺度、主成分分析和多任务分类中,当近似低秩矩阵时出现。在这类问题中,我们同时对模型和数据进行分区。

数据集

对于这个问题,我们使用的是MovieLens数据集。此数据集包含在线电影推荐服务MovieLens用户应用于电影的分级和标签(请参阅细节)。

维克多模型和代码

以下代码显示了应用于MovieLens数据集的分解模型问题的模型规范和模型实例化。

--这将删除型号规格删除模型规范low_rank_nopara;--这将创建模型规范创建模型规范low_rank_nopara(model_type=(python)作为(w),data_item_type=(int,int,float8)as(行,列,分级),目标=examples.factor_simple.factor_simple.se_loss,objective_agg=总和,grad_step=示例.factor_simple.factor_simple.rad);--这将实例化模型创建MODEL INSTANCE movielens1m示例movielens1m(行、列、分级)型号规格low_rank_noparaINIT_FUNCTION示例.factor_simple.factor_simple.initialize_model当examples.factor_simple.factor_simple.stoping_condition时停止;

1.型号规格

该规范创建了一个python类型的“low_rank_nopara”模型,该模型以字节数组的形式存储在数据库中。数据项由3个值组成:行、列和评级,它们分别以整数、整数和浮点形式存储。我们指定了损失函数,并且分数将由SUM聚合器进行聚合。最后,我们定义了模型的梯度步长。

在下面的代码部分中,您可以看到用户提供的损失和梯度函数。注意,这段代码是使用Victor提供的实用程序在几行python中定义的。

定义se_loss(m,row,col,rating):i=行-1#matlab。。。j=第1列v=low_rank_helper.dot(m.L[i],m.R[j])-额定值返回v*v定义梯度(m,行,列,额定值):L=米LR=米Ri=行-1#matlab。。。j=第1列err=low_rank_helper.dot(L[i],R[j])-评级e=-(m.步长*err)tempLi=列表(L[i])low_rank_helper.scale_and_add(tempLi,R[j],e)low_rank_helper.scale_and_add(R[j],L[i],e)L[i]=临时Lilow_rank_helper.ball_project(L[i],m.B,m.B2)low_rank_helper.ball_project(R[j],m.B,m.B2)m.set_L(i,L[i])m.set_R(j,R[j])返回m

2.模型实例化

为了实例化模型,我们指定了如何通过给它一个函数名来初始化模型。此外,我们还指定何时停止优化模型。同样,这些函数是用几行python代码编写的,如下所示:

定义initialize_model():n行=6040nCols=3952#这些的TODO查询return LowRankModel(20,nRows,nCols,1.5)定义stopping_condition(s,loss):如果不是(s.has_key(“状态”)):s[状态]=0s[状态]+=1返回s[状态]>5

3.模型应用

马上就来。

运行示例

马上就来。