编写一个非负矩阵分解代码
时间: 2023-11-21 16:06:20 浏览: 233
好的,以下是一个简单的非负矩阵分解(NMF)的Python代码实现:
```python
import numpy as np
from sklearn.decomposition import NMF
# 生成一个3x3的随机矩阵
X = np.random.rand(3, 3)
# 定义NMF模型,设置分解后的矩阵维度为2,使用乘法更新规则,使用均方误差损失函数
model = NMF(n_components=2, init='random', solver='mu', max_iter=1000, alpha=0.01, l1_ratio=0.5)
# 训练模型
W = model.fit_transform(X)
H = model.components_
# 输出分解后的矩阵
print("原始矩阵:\n", X)
print("分解后的矩阵W:\n", W)
print("分解后的矩阵H:\n", H)
print("重构矩阵:\n", np.dot(W, H))
```
这段代码使用了scikit-learn中的NMF类来实现非负矩阵分解,具体步骤如下:
1. 生成一个3x3的随机矩阵X;
2. 定义NMF模型,设置分解后的矩阵维度为2,使用乘法更新规则,使用均方误差损失函数;
3. 训练模型,得到分解后的矩阵W和H;
4. 输出分解后的矩阵以及重构矩阵。
需要注意的是,NMF的分解结果不是唯一的,因此每次运行代码得到的分解结果可能会有所不同。
阅读全文