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技术站