对上式变形:$ \hat{x} = c _ {1}u^{1}+...+c _ {k}u^{k} ≈ x-\overline{x} \(。我们需要找`K-vector`使得\) \hat{x}\(跟\)x-\overline{x} $越接近越好。我们用reconstruction error重建误差来表示两者之间的差,接下来就是要minimize这个误差。
对此使用SVD奇异值分解来找到最优K-vector。我们将x拆成$ U_{MxK} · Σ_{KxK} · V_{KxN} \(,其中`U`总共有`K`个`orthonormal vector`正交向量,对应到\)XX^{T}$最大的K个特征向量。实际上就是之前上种推导的w,所以说w就是component构件。
用SVD进行矩阵分解,他分解出来的两个矩阵可正可负,如果遇到负值在PCA中是不知道如何处理的,因此我们也可以用Non-negative matrix factotization NMF,他会强迫所有的component weigth都是正的。
PCA看起来类似神经网络的一层,用的线性激活函数,PCA相比单层网络而言更为简单,但是网络相比的优点就是可以deep。PCA有些明显的弱点,一是无监督,PCA让数据降到一个可让数据差异最大的低维,但这样可能使得本是不同的class数据被merge合并到了一个类上。这个时候就需要引入label data,改变成LDA降维方法。二是Linear线性,他只能进行线性降维,而不能类似将w方向曲线化再映射投影。之后会提到non-linear的降维方法。PCA有个特性是:它保留了原来在高维空间中的距离关系。
dimension reduction除此之外还有很多方法,比如MDS(它不需要把每个数据都表示成特征向量,只需要知道各特征之间的距离,效果类似于PCA),概率版本PCA - probability PCA,非线性版本PCA - kernel PCA,Canonical Correlation Analysis CCA典型相关分析
Matrix Factorization MF 矩阵分解
人和物之间经常会有个矩阵关系,比如人和电影评分,人拥有公仔数量。每个人和每个物后可以用一个二维vector来代表其属性,两者矩阵中对应element元素可以看做是两个vector的inner product内积。那么中间的矩阵\({Matrix} _ {MxN}\)就可以看作是\({R^{人}} _ {MxK}\)和 $ {R^{物}} _ {KxN} $ 相乘。两者之间的Matrix Error越小越好。
这个时候可以用SVD分解,把中间的Σ归并到左右或者右边即可。然后对其进行minimize error即可。
MF在Recommended system推荐系统中的应用:对上述矩阵而言有时候一些信息是不知道或者丢失的,比如不知道我给A电影的评分,那么使用SVD分解就可能无法进行,这个时候我们可以直接用gradient descent梯度下降的方式来做,写一个loss function:\(L=Σ _ {(i,j)}(r^{i} * r^{j} - n _ {ij})^{2}\),在求和时只计算有值部分。要求得两边vector后就可以内积求解矩阵未定义部分。
对上述模型还可以再改进,不是用内积直接得到元素值,而是还要加上两个常数因素b1&b2,b1表示某人有多喜欢看电影,b2表示某电影有多么有吸引力让人去看,这些都是与两者属性无关的latent factor潜在因素。后续的minimize式子也再加上\(+ b _ {i} + b _ {j}\),甚至可以再加上正则式。
MF在topic analysis话题分析中的应用:MF矩阵分析在此称之为latent semantic analysis LSA潜在语义分析,矩阵值是term frequency词频,把词频乘上一个权重说明词的重要性。
评价某词的重要性的常用方法是inverse document frequency反文档频率,意思是计算每个词汇在整个paper有多少比率的文档算涵盖该词汇,如果说某词汇每个文档都涵盖则说明它的反文档频率很小重要性很低,而若只有某篇文档有则反文档频率很大十分重要。
话题分析的方法十分多,基本思想是差不多的(但有很多种变化)。常见的是probability latent semantic analysis PLSA概率潜在语义分析和latent Dirchlet allocation LDA潜在狄利克雷分配。
第十八章 无监督学习 - word embedding词嵌入
word embedding词嵌入是降维的一个应用。如果不使用词嵌入降维,那么一般是将词进行one-hot编码(1-of-N Encoding)。如果不同word的数量较多那么得到的维数过多并且存在很多冗余(eg. 只有一个维度是1其他都是0,每个维度代表一个词)
有一种方法是word class,即把不同的word但同样性质分成同一个class,但是这样会使特征少了信息,比如class1是动物,class2是动物行为,这之间的关联用class是没有办法表达出来,所以需要词嵌入。
word Embbedding同样也是将word映射到高维空间,但是远比one-hot维度要低。映射结果是类似同一个语义的词汇,在空间上距离接近,并且每个维度都有自己独特含义。整个问题是一个无监督学习问题,我们要做的是学习一个神经网络找一个function,输入是词汇,输出的对应的词嵌入编码。
之前讲过auto-encoder自编码器(基于深度学习的降维方法)对此并不适用。
基本思想是模型输入文本,根据词的上下文内容,来推导各词汇之间的联系。
词嵌入就该思想有两种不同的做法: