NMF作为Python Scikit中的聚类方法

时间:2019-01-30 21:05:16

标签: python scikit-learn nmf

我正在为NMF文本数据集群实现Python脚本。在我的工作中,我正在使用Scikit NMF实现,但是据我了解,在Scikit NMF中,它更像是分类方法,而不是聚类方法。

我已经开发了一个简单的脚本来处理一些示例弧线。我正在对其进行预处理,并将其作为NMF的输入。根据我的教授分享的论文,我收到了一些聚类,但是我不知道如何可视化/呈现它们。

你们中的任何人都知道如何使这种人性化的阅读方式吗? :)

下面的主脚本代码:

from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.cluster import KMeans
from sklearn.preprocessing import normalize
from sklearn.decomposition import LatentDirichletAllocation, NMF
from sklearn.preprocessing import normalize
import pandas as pd
from preprocess import *


# loading data
raw_text_data = loading_bbc_datasets(5)

text_data = text_preparing(raw_text_data)
tf_vectorizer = TfidfVectorizer()
Y = tf_vectorizer.fit_transform(text_data)
Y_norm = normalize(Y)

nmf = NMF(n_components=5, random_state=1, alpha=.1, l1_ratio=0.5)
A = nmf.fit_transform(Y_norm)
X = nmf.components_
features = tf_vectorizer.get_feature_names()
print(features)

AF = pd.DataFrame(Y_norm.toarray())
WF = pd.DataFrame(A)
HF = pd.DataFrame(X)

AF.to_csv('Y.csv', sep=',', header=features)
WF.to_csv('A.csv', sep=',', header=['C1', 'C2', 'C3', 'C4', 'C5'])
HF.to_csv('X.csv', sep=',', header=features)

1 个答案:

答案 0 :(得分:1)

NMF不是分类方法,它是降维方法。当您使用CountVectorizer处理文本时,尺寸很大,并且NMF允许缩小文本。

NMF将文档*术语矩阵X近似为:W * H。

新维度可以看作是主题,因此对于给定的文档,您可以在W中看到该文档属于哪个主题,因为这些值均为非负数(如果值较大,则该文档与该主题高度相关) )。

类似地,对于给定的主题,您可以使用H获得与其高度相关的词。

要回答您的问题,您可以将文档归类为主题,并通过提供最相关的词来以人类友好的方式表示每个主题。