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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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