非负矩阵分解(Non-negative Matrix Factorization,NMF)是一种无监督学习算法,用于将非负矩阵分解为两个或多个较低秩的非负矩阵的乘积。NMF 在文本挖掘、图像处理、音频分析等领域都有广泛的应用,特别适用于处理非负数据。
以下是一个使用 Python 中的 scikit-learn
库来实现 NMF
的简单教程。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import NMF
# 生成模拟数据
np.random.seed(42)
X = np.abs(np.random.normal(loc=0, scale=1, size=(100, 50)))
# 构建 NMF 模型
n_components = 3 # 指定分解的组件数目
nmf = NMF(n_components=n_components, init='random', random_state=42)
# 训练模型
W = nmf.fit_transform(X) # W 矩阵
H = nmf.components_ # H 矩阵
# 可视化原始数据
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.imshow(X, cmap='viridis', aspect='auto')
plt.title('Original Data')
# 可视化 NMF 分解结果
plt.subplot(1, 2, 2)
plt.imshow(np.dot(W, H), cmap='viridis', aspect='auto')
plt.title('NMF Reconstruction')
plt.show()
在这个例子中,我们生成了一个模拟数据集 X
,然后使用 NMF
将其分解为两个矩阵 W
和 H
的乘积。最后,我们可视化了原始数据和 NMF
分解的重建结果。
NMF
的一个重要特点是分解得到的矩阵是非负的,这在许多实际应用中是有意义的,例如在主题建模中,每个主题和文档中的权重都是非负的。
实际应用中,你可能需要根据具体情况调整模型的参数,例如分解的组件数目、初始化策略等。