NMF(Non-negative matrix factorization, 非负矩阵分解)

NMF算法类似于主成分分析,是一种降维算法。其可将原始的非负矩阵分解为两个非负矩阵的乘积,从而对原始数据进行降维。

数学语言表示为:对于给定非负矩阵V,可寻找到,两个非负矩阵WH,使得 VWH
v2-e9491ec05171bc97e89402350c0e02d5_r.png
(原始图床网站不稳定,需要更换图床)
其中,
V矩阵中每一列表示一个观测(observation)或者为一个样本,每一行表示一个特征(feature);
W矩阵为基矩阵,代表每个特征对聚类结果的贡献度;
H矩阵称为系数矩阵或样本矩阵,代表每个样本对聚类结果的贡献度;

NMF算法采用欧几里得距离的平方来衡量XUV^T^

minU,VXUVTF2s.t.U0,V0 # cNMF算法(约束非负矩阵分解) 改算法在NMF算法的基础上,将标签信息作为附加的硬性约束,使得具有相同类标签信息的数据在新的低维空间保持一致。但是对于没有标签的数据样本没有任何的约束能力。 cNMF算法是假设数据集**X**中包含有c类样本,其中前l个样本点x~1~,x ~2~ ,…,x~l~ 标签信息已知,其余n-l个样本标签信息位置。 cNMF算法引入辅助矩阵**Z**将上述样本约束矩阵嵌入目标函数中,使得**V**中属于同一类的样本映射为同一点,令**V** = **A** **Z**,即最小化一下目标函数。 minU,VXU(AZ)TF2s.t.U0,V0

部分代码实现原则

偏差计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

def square_error(self):
"""
计算偏差值
"""
predicted = self.full_matrix()
error = 0
for i in range(self.num_samples):
for j in range(self.num_features):
if self.not_nan_index[i, j]:
#pow(X,Y,Z)返回X的Y次方
error += pow(self.X[i, j] - predicted[i, j], 2)
return error