from numpy import *
from random import *
def difcost(a,b):
dif=0
for i in range(shape(a)[0]):
for j in range(shape(a)[1]):
dif+=pow(a[i,j]-b[i,j],2)
return dif
def factorize(v,pc=10,iter=50):
ic=shape(v)[0]
fc=shape(v)[1]
w=matrix([[random() for j in range(pc)] for i in range(ic)])
h=matrix([[random() for i in range(fc)] for j in range(pc)])
for i in range(iter):
wh=w*h
cost=difcost(v,wh)
print cost
if cost==0:break
hn=(transpose(w)*v)
hd=(transpose(w)*w*h)
h=matrix(array(h)*array(hn)/array(hd))
wn=(v*transpose(h))
wd=(w*h*transpose(h))
w=matrix(array(w)*array(wn)/array(wd))
return w,h
if __name__=='__main__':
m1=matrix([[1,2,3],[4,5,6]])
m2=matrix([[1,2],[3,4],[5,6]])
print m1*m2
w,h=factorize(m1*m2,pc=2,iter=200)
print w*h
print w
print h
非负矩阵分解
最新推荐文章于 2019-03-06 14:00:33 发布
本文介绍了一种基于Python的矩阵分解算法实现,通过定义差值成本函数来衡量两个矩阵之间的差异,并利用迭代方式优化分解出的两个因子矩阵W和H,最终达到逼近原始矩阵的效果。文章提供了完整的代码示例。
5万+

被折叠的 条评论
为什么被折叠?



