定期,当我对数据运行主题分析并尝试使用pyLDAvis进行可视化时,我收到一个验证错误:“并非doc_topic_dists中的所有行(分布)总和为1”。这是一些基本代码。下面的一些代码:
tfidf_vectorizer = TfidfVectorizer(max_df=.95, min_df=1, max_features=None, stop_words='english')
tfidf = tfidf_vectorizer.fit_transform(lines2)
tfidf_feature_names = tfidf_vectorizer.get_feature_names()
nmf = NMF(n_components=3, random_state=None, alpha=.1, l1_ratio=.5, init='nndsvd').fit(tfidf)
panel = pyLDAvis.sklearn.prepare(nmf, tfidf, tfidf_vectorizer, mds='tsne')
罪魁祸首是那里的最后一条语句(“ panel =”语句);显然,由nmf.transform(tfidf)生成的矩阵包含一些全为零的行,因此尝试通过将行以列为中心来归一化行意味着返回nan。似乎没有模型参数的组合可以解决此问题(实际上,通过产生更多带有nan的行,它们似乎常常使问题变得更糟)。
FWIW,涉及的数据是来自BBC Health的Tweets文本,因此平均响应长度相当短-不到4,000条记录,每条记录平均长4.8个字。尽管如此,我已经证实零加权答案都包含模型词汇中包含的单词,所以我不确定为什么会出现问题或如何解决它。
如果没有办法解决,在这种情况下,简单地用列均值替换是否明智?