#Matrix Factorization ###①linearNetwork Hypothesis 机器学习的做用就是要从一堆数据中学习到学习到某种能力,而后用这种skill来预测将来的结果。好比一个电影推荐的例子,咱们手上有不少的电影数据,如今就须要训练一个机器学习的模型来使得这个模型能够预测一个新来的用户会喜欢什么电影,而后推荐过去。或者是对用户没有看过的电影进行评分预测。git
Nefix公司曾经举办过一场比赛,包含了大量的电影数据信息和近一亿个排名信息。用$$x_n = (n)$$那么,问题来了,第几个用户的这个n是没有什么实际意义的,也就是一个抽象特征,意味着只是一个编号,随便给只要不重复便可。可是输出方面就是很正常了:$$y_n = r_{nm}$$表示的就是第n个用户对第m部电影的排名预测。
仔细看一下这些ID特征,一般就是数字表示,好比1126,5566,6211等。这些数字编号并无什么太大的意义,都只是一种ID编号而已。这类特征,被称为类别特征,好比:ID号,blood type,programming languages等等,而许多机器学习模型都是数值特征,好比linear model,都是一串的数据,决策树例外,能够是类别区分。
因此要创建一个推荐系统的机器学习模型,就要把用户的ID号这些categorical features转换成numerical features,这种转换其实就是一个编码的过程了。
一种比较简单的就是binary vector encode。也就是说,若是输入样本有N个,就构造一个维度为N的向量。对应第n个样本那么第n个位置就是1其余都是0,好比下面的一个例子:
有点像one-hot向量,但不是。编码以后,那么用户的ID就是binary vector了。要注意的是用户是不必定对每个电影都会进行评分,能够就是评了一部分而已:
咱们就是要预测那些没有被评分的电影。**对于这个过程,咱们要作的就是掌握每个用户对于不一样电影的喜好程度,掌握这个电影的各类特征factor,好比有多少的喜剧,有多少的悬疑等等。这其实就是一个特征提取的过程。**这里使用的是$$N - d - M$$的网络,N就是输入的个数,d就是隐藏层的个数,也就是提取出特征的个数,M就是最后输出类别的个数。这个结构和以前咱们所看的autoencode很是像,可是不一样的就是autoencode是最后输出尽量的要拟合输入。
中间还有一个小问题,中间有一个非线性的函数,目的就是要使得整个模型nonlinear化,能够处理非线性的数据,**可是在这里需不须要呢?**实际上是不须要的,由于输入的向量是encoding获得的,大部分是0,小部分是1,那么就意味着这后面乘上的W权值其实就是只用一行有用,其余都是0,至关于只有一个权重值进入到tanh函数进行运算。从效果上来讲,tanh(x)与x是无差异的,只是单纯通过一个函数的计算,并不影响最终的结果,修改权重值便可获得一样的效果。由于进入计算以后,修改权值就能够达到效果了,而以前须要的缘由是,以前的结果都是须要多个权值就行组合,不加tanh就是线性组合了,因此加来变成非线性。这里就只有一个,不存在什么组合,因此直接使用便可。 改进一下,就是下面的图像了: github
对于这种结构,天然就是linearNetwork了,这个网络结构里面:$$W_{ni}^{(1)}$$就是Nxd,用V来表示,其实应该是$$V^T$$V的转置,隐藏层到输出层:$$W_{im}^{(2)}$$是dxM,因此进行线性模型以后:算法
###②Basic Matrix Factorization 上面的变换VX咱们看作是一种特征转换,φ(x),那么就能够变成这样:
咱们须要作的就是看看排名WV和y的结果要差很少,也就是作拟合,因此error function就是square error function:
上式中,灰色的部分是常数,并不影响最小化求解,因此能够忽略。接下来,咱们就要求出Ein最小化时对应的V和W解。 根据上式的分解: