MiniBatchSparsePCA在文本数据上的应用

目标

我试图复制一篇论文(第4.1节)中描述的应用,该应用将稀疏主成分分析应用于文本语料库,输出为K个主成分,每个成分显示出“否则隐藏的结构”。换句话说,每个主成分应该包含一组词,这些词共享一个共同的主题。

我使用了sklearn的MiniBatchSparsePCA包来尝试复制这个应用,但我的输出是一个零矩阵。

数据
我的数据来自一项调查,该调查在Stata中进行了清理。它是一个包含386个答案的向量,这些答案是句子。

我的尝试

# 导入库 #####################################import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerimport numpy as npfrom sklearn import decomposition##################################### 使用sklearn导入Stata数据。 ## 数据来自一项调查,使用Stata进行了清理。####################################data_source = "/Users/****/q19_free_text.dta"raw_data = pd.read_stata(data_source) # 从Stata文件中读取数据。  text_data = raw_data.iloc[:,1] # 清除观察ID号。text_data.shape     # Out[268]: (368, ) - 有368个文本(句子)答案。##################################### 词频 - 逆文档词频####################################    vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,stop_words='english')X_train = vectorizer.fit_transform(text_data)spca = decomposition.MiniBatchSparsePCA(n_components=2, alpha=0.5)spca.fit(X_train) #TypeError: 传递了一个稀疏矩阵,但需要密集数据。使用X.toarray()转换为密集的numpy数组。X_train2 = X_train.toarray() # 尝试使用密集数组...spca.fit(X_train2)components = spca.components_print(components)  #Out: [[ 0.  0.  0. ...,  0.  0.  0.]                   #     [ 0.  0.  0. ...,  0.  0.  0.]]components.shape   #Out: (2, 916)# 空输出!

其他说明

我使用了以下来源编写上述代码:

官方示例

文本数据向量化

关于相同问题的先前提问


回答:

(…) 做类似于论文链接中第4.1节所做的事情。他们使用SPCA“总结”文本语料库,输出为K个成分,每个成分是一组词(或特征)。

如果我理解正确的话,你问的是如何检索成分中的词。

你可以通过检索成分中非零条目的索引来做到这一点(在components上使用适当的numpy代码)。然后使用vectorizer.vocabulary_,你可以找出哪些索引(词/标记)在你的成分中出现。

请查看这个笔记本以获取示例实现(我使用了20个新闻组数据集)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注