【问题标题】:Converting sklearn CountVectorizer matrix to list of dictionaries将 sklearn CountVectorizer 矩阵转换为字典列表
【发布时间】:2018-03-25 07:36:06
【问题描述】:

我使用CountVectorizer 创建了一个矩阵,看起来像

[[1, 2, 1....],
 [0, 4, 0,...],
 [0, 0, 7....]]

每列映射到一个特征名称

['sweet', 'pretty', 'bad'....]

我想做的事

将矩阵的行转换为格式为

的字典列表
[{'sweet': 1, 'pretty': 2, 'bad': 1  ..} , {'sweet': 0, 'pretty': 4, 'bad': 0  ..} , {'sweet': 0, 'pretty': 0, 'bad': 7  ..}]

这基本上是在做DictVectorizerinverse_transform 函数会做的事情,但是由于我没有从字典中创建矩阵,我认为我不能使用它,因为我收到了这个错误

“DictVectorizer”对象没有属性“feature_names_”

我如何实现这一目标? NumPy 是否提供了一个内置函数来将数组转换为字典列表,我可以在其中将每一列映射到给定的键?

【问题讨论】:

标签: python numpy scikit-learn


【解决方案1】:

您要查找的函数是 get_feature_names
不确定是否有内置的方法可以实现您想要的,但可以通过简单的地图轻松实现

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer() 

#`data` is an array of strings

tdata = cv.fit_transform(data) 

ft = cv.get_feature_names() 

#create a dictionary with feature names as keys and row elements as values

result = list(map(lambda row:dict(zip(ft,row)),tdata.toarray()))

编辑:节省内存的解决方案

import pandas as pd

df = pd.SparseDataFrame(tdata, columns=ft)

【讨论】:

  • 最后一行是我正在寻找的谢谢。但是我正在处理一个超过百万行的文本文件,所以它给了我一个内存错误。我认为如果我可以将数组转换为 pandas DataFrame 可能会很有效,它确实有一个内置方法可以做到这一点,但我得到“DataFrame 构造函数没有正确调用!”当我做 DataFrame(data = X, columns= ft)
  • 你可以使用df =pd.DataFrame(tdata.toarray(),columns=ft)
  • 或者更好的是稀疏数据框df = pd.SparseDataFrame(tdata,columns=ft)
  • 对我没用,但确实如此:pd.DataFrame.sparse.from_spmatrix(tdata, columns=ft)
猜你喜欢
  • 2016-11-05
  • 2015-12-09
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2021-11-25
  • 2010-12-03
相关资源
最近更新 更多