超直白超简单-线性模型和fm模型特征参数的举例说明

电影名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维向量。

你可能感兴趣的:(机器学习,机器学习)