详解 Scikit-learn 的 decomposition.NMF函数:非负矩阵分解

Scikit-learn的sklearn.decomposition.NMF函数

作用

NMF(Non-negative Matrix Factorization)是一种无监督学习的方法,用于发现一组数据的次级结构。它可以将一个高维的非负矩阵分解为两个低维的非负矩阵的乘积。其中一个矩阵代表了数据中的特征,另一个矩阵代表了数据的潜在结构。

在Scikit-learn库中,使用sklearn.decomposition.NMF函数实现NMF分解,帮助用户更容易的分析数据集的潜在结构。

使用方法

参数介绍

  • n_components: 指定分解后的矩阵维数
  • init: 指定分解使用的初始化方式,可以为"random"或"nndsvd"
  • solver: 指定分解使用的求解器,可以为"cd"或"mu"
  • max_iter: 指定最大循环次数
  • random_state: 指定随机种子

实例1:文本数据降维

下面给出一个常见的使用案例,使用NMF将文本矩阵降维:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import NMF

vectorizer = TfidfVectorizer(max_features=5000, stop_words='english')
tfidf = vectorizer.fit_transform(docs)

nmf = NMF(n_components=10)
W = nmf.fit_transform(tfidf)

该实例中,TfidfVectorizer将文本转换成矩阵,然后用NMF对矩阵进行分解,得到W矩阵。

实例2:图像数据降维

下面给出一个图像数据的例子:

from sklearn.datasets import load_sample_images
from sklearn.decomposition import NMF
import matplotlib.pyplot as plt

images = load_sample_images().images
X = images.reshape(len(images), -1)

nmf = NMF(n_components=2, solver="mu", max_iter=1000, random_state=0)
W = nmf.fit_transform(X)
H = nmf.components_

W = (W - W.min()) / (W.max() - W.min())

plt.figure(figsize=(16, 6))
plt.subplot(1, 3, 1)
plt.imshow(images[0])
plt.axis('off')
plt.subplot(1, 3, 2)
plt.imshow(W[0].reshape(427, 640), cmap='gray')
plt.axis('off')
plt.subplot(1, 3, 3)
plt.imshow(H[0].reshape(8, 8), cmap='gray')
plt.axis('off')
plt.show()

该实例中,我们将8张8*8的图像合成一个矩阵X,然后使用NMF对其进行分解。将分解出来的W和H进行展示。

总结

NMF可以帮助我们发现数据中的潜在结构,对于高维数据降维十分有效。本文介绍了Scikit-learn的NMF分解函数的使用方法,并通过文本和图像数据的实例进行了示范。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 decomposition.NMF函数:非负矩阵分解 - Python技术站

(0)
上一篇 2023年3月30日
下一篇 2023年3月30日

相关文章

合作推广
合作推广
分享本页
返回顶部