nmf算法 python_NMF、CNMF(原理+python实现)

本文介绍了非负矩阵分解(NMF)和约束非负矩阵分解(CNMF)的原理,并提供了相应的Python代码实现。NMF将矩阵分解为两个非负矩阵的乘积,而CNMF在NMF基础上引入了标签信息的硬约束,适用于有标签数据。通过对比,发现NMF在特定数据集上的误差可能小于CNMF。
摘要由CSDN通过智能技术生成

这篇简书主要解决两个问题:

1、NMF的原理以及代码实现

2、CNMF的原理以及代码实现

NMF(非负矩阵分解)

NMF算法的基本思想是将原始非负矩阵分解为两个非负矩阵的乘积从而对原始高维矩阵进行降维表示。

理论参考NMF理论

代码如下:

import numpy as np

import random

def nmf(X, r, k, e):

'''

X是原始矩阵

r是分解的两个非负矩阵的隐变量维度,要远小于原始矩阵的维度

k是迭代次数

e是理想误差

input X

output U,V

'''

d, n = X.shape

#print(d,n)

#U = np.mat(random.random((d, r)))

U = np.mat(np.random.rand(d, r))

#V = np.mat(random.random((n, r)))

V = np.mat(np.random.rand(n, r))

#print(U, V)

x = 1

for x in range(k):

print('---------------------------------------------------')

print('开始第', x, '轮迭代')

#error

X_pre = U * V.T

E = X - X_pre

#print E

err= 0.0

for i in range(d):

for j in range(n):

err += E[i,j] * E[i,j]

print('误差:', err)

if err < e:

break

#update U

a_u = U * (V.T) * V

b_u = X * V

for i_1 in range(d):

for j_1 in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值