小编Joh*_*les的帖子

非负矩阵分解无法收敛

我正在尝试使用Kullback-Liebler散度作为相似性度量来实现非负矩阵分解.该算法描述于:http://hebb.mit.edu/people/seung/papers/nmfconverge.pdf.下面是我的python/numpy实现,带有一个运行它的示例矩阵.

简而言之,该算法应该学习矩阵W(n乘r)和H(r乘m)使得V(n乘m)近似为WH.你从W和H中的随机值开始,并按照Seung和Lee论文中描述的更新规则,你应该越来越接近W和H的良好近似值.

该算法被证明可以单调地减少分歧度量,但这不是我的实现中发生的事情.相反,它稳定在两个发散值之间的交替.如果你看一下W和H,你可以看到产生的因子分解不是特别好.

我想知道在计算W的更新时是否使用更新的或旧的H.我尝试了两种方式,并且它不会改变实现的行为.

我已经多次检查了我对文件的实现情况,而且我没有看到我做错了什么.任何人都可以对这个问题有所了解吗?

import numpy as np

def update(V, W, H, r, n, m):
    n,m = V.shape 
    WH = W.dot(H)

    # equation (5)
    H_coeff = np.zeros(H.shape)
    for a in range(r):
        for mu in range(m):
            for i in range(n):
                H_coeff[a, mu] += W[i, a] * V[i, mu] / WH[i, mu]
            H_coeff[a, mu] /= sum(W)[a]
    H = H * H_coeff

    W_coeff = np.zeros(W.shape)
    for i in range(n):
        for a in range(r):
            for mu in range(m):
                W_coeff[i, …
Run Code Online (Sandbox Code Playgroud)

python numpy machine-learning

4
推荐指数
1
解决办法
1488
查看次数

标签 统计

machine-learning ×1

numpy ×1

python ×1