电影名A,类型动作(010),主演X(0100000),评分8
电影名B,类型动作(010),主演Y(0010000),评分7
电影名C,类型文艺(001),主演X(0100000),评分6
1.简单模型,w只是一个数字:
8 = 动作*W1 + 主演X*W2 w为:W1=4,W2=4
7 = 动作*W1 + 主演Y*W2 w为:W1=4,W2=3
6 = 文艺*W1 + 主演X*W2 w为:W1=3,W2=3
y = x1*w1 + x2*w2
电影名D,类型文艺(001),主演Y(0010000),评分5
y = x1*3 + x2*3 = 预测评分6,w:W1=3,W2=3
2.说说特征交叉:
类型特征取值有3维,主演有7维,如果类型和主演这两个特征交叉,则搞出来个 x12对应的w12,应该是3*7=21种组合,21个权重数字。这样21个每一个记录着一种具体特征值交叉起来的新值的权重。相当于w1有3维,w2有7维,w12有21维。
比如动作+主演X这一种组合,对应x12=(0100100000)权重w12=2;x1=010,x2=0100000,权重w1=3,w2=3
这样下一次当出现了动作片主演是X的直接用这个权重算出6+2=8分(公式是x1w1+x2w2+x12w12=y)
如果特征只有这2个,暴力交叉之后,特征参数有这么多:3+7+21=31个
换个例子:
如果特征有10个,且每个有7维,一共会有这么多权重值:7*10+(10*9/2)*(7*7)=2275个
所以要用fm矩阵分解,把10个特征排列组合出来的45对交叉项,以及一对交叉项的49种取值。搞成了每一个特征值(一共70个)对应一个k维隐向量。比如k=3
计算这45对交叉项时候,每次都用7k·7k得到它俩的7·7矩阵,没错,转换回来之后的信息不能少,还是49种取值。但是保存和计算的参数不需要是45*49个了,而是10*7*3个=210个
注意,如果不用fm,还是一个数字,如果用了fm,就从一个数字变成一个k维向量。