非负矩阵分解


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值