- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 TFIDFVectorizer (或 CountVectorizer 后跟 TFIDFTransformer )以获得我的术语的向量表示。这意味着,我想要一个术语的向量,其中文档是特征。这只是由 TFIDFVectorizer 创建的 TF-IDF 矩阵的转置。
>>> vectorizer = TfidfVectorizer()
>>> model = vectorizer.fit_transform(corpus)
>>> model.transpose()
max_features
在 CountVectorizer 中将完全符合我的要求。我可以指定一个维度,而 CountVectorizer 会尝试将所有信息放入该维度。不幸的是,这个选项是针对文档向量而不是词汇表中的术语。因此,它减少了我的词汇量,因为术语就是特征。
>>> countVectorizer = CountVectorizer(input='filename', max_features=300, transpose=True)
最佳答案
我不知道有什么直接的方法可以做到这一点,但让我提出一种如何实现的方法。
您试图将语料库中的每个术语表示为一个向量,该向量使用语料库中的文档作为其组件特征。因为文档的数量(在您的案例中是特征)非常大,所以您希望以类似于 max_features 的方式限制它们。
根据 CountVectorizer用户指南(与 TfidfVectorizer 相同):
max_features int, default=None
If not None, build a vocabulary that only consider the topmax_features ordered by term frequency across the corpus.
vectorizer = TfidfVectorizer()
model = vectorizer.fit_transform(corpus)
# We use the inverse_transform which returns the
# terms per document with nonzero entries
inverse_model = vectorizer.inverse_transform(model)
# Each line in the inverse model corresponds to a document
# and contains a list of feature names (the terms).
# As we want to rank the documents we tranform the list
# of feature names to a number of features
# that each document is represented by.
inverse_model_count = list(map(lambda doc_vec: len(doc_vec), inverse_model))
# As we are going to sort the list, we need to keep track of the
# document id (its index in the corpus), so we create tuples with
# the list index of each item before we sort the list.
inverse_model_count_tuples = list(zip(range(len(inverse_model_count)),
inverse_model_count))
# Then we sort the list by the count of terms
# in each document (the second component)
max_features = 100
top_documents_tuples = sorted(inverse_model_count_tuples,
key=lambda item: item[1],
reverse=True)[:max_features]
# We are interested only in the document ids (the first tuple component)
top_documents, _ = zip(*top_documents_tuples)
# Having the top_documents ids we can slice the initial model
# to keep only the documents indicated by the top_documents list
reduced_model = model[top_documents]
请注意,此方法仅考虑每个文档的术语数,无论它们的数量 (CountVectorizer) 或权重 (TfidfVectorizer) 是多少。
关于python - 从 TFIDFVectorizer/CountVectorizer 减少词向量的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61274499/
使用以下代码,CountVectorizer 将“风干肉”分解为 3 个不同的向量。但我想要的是将“风干肉”保留为 1 个向量。我该怎么做? 我运行的代码: from sklearn.feature_
我正在尝试对我拥有的一组推文使用多项式朴素贝叶斯分类。 这是我的代码: import codecs from sklearn.feature_extraction.text import CountV
我正在使用 sklearn python 包,我在使用预先创建的字典创建 CountVectorizer 时遇到问题,其中 CountVectorizer 不会删除以下功能只出现一次或根本不出现。 这
假设我的文本文件包含以下文本: The quick brown fox jumped over the lazy dogs. A stitch in time saves nine. The quic
我已经使用 python 创建了一个文本分类模型。我有 CountVectorizer,它会生成 2034 行和 4063 列(唯一单词)的文档术语矩阵。我保存了用于新测试数据的模型。我的新测试数据
CountVectorizer 忽略大写单词的原因是什么? cv = CountVectorizer(stop_words=None,analyzer='word',token_pattern='.*
有人会尝试向我解释为什么当我尝试 fit_transform 任何短词时 CountVectorizer 会引发此错误吗?即使我使用 stopwords=None 我仍然会得到同样的错误。这是代码 f
我有一个名为 dictionary1 的列表。我使用以下代码获取文本的稀疏计数矩阵: cv1 = sklearn.feature_extraction.text.CountVectorizer(sto
这是我的数据集: anger,happy food food anger,dog food food disgust,food happy food disgust,food dog food neu
我有如下整数列表: mylist = [111,113,114,115,112,115,234,643,565,.....] 我有很多这样的列表,其中包含超过 500 个整数,我想在其上运行 Coun
尝试将字符串转换为数值向量, ### Clean the string def names_to_words(names): print('a') words = re.sub("[^
在我的分类模型中,我需要保留大写字母,但是当我使用 sklearn countVectorizer 构建词汇表时,大写字母转换为小写字母! 为了排除隐式分词,我构建了一个分词器,它只传递文本而无需任何
我是 NLTK 的新人,在创建评论分类器时遇到问题。 当作为输入传递的数据的形状为 (10000,1) 时,我无法理解转换后的数据的形状如何是 1*1 稀疏矩阵我对原始评论数据进行了一些处理。比如删除
我正在尝试从给定的文档中提取一些特征,给定一组预定义的特征。 from sklearn.feature_extraction.text import CountVectorizer features
我已经安装了 python 2.7、numpy 1.9.0、scipy 0.15.1 和 scikit-learn 0.15.2。现在,当我在 python 中执行以下操作时: train_set =
我了解 CountVectorizer 的一般工作原理。它获取单词标记并创建文档(行)和标记计数(列)的稀疏计数矩阵,我们可以将其用于 ML 建模。 但是,它如何处理可能出现在测试数据中但未出现在训练
CountVectorizer 默认标记模式将下划线定义为字母 corpus = ['The rain in spain_stays' ] vectorizer = CountVectorizer(t
我正在尝试将 Lematization 添加到来自 Skit-learn 的 CountVectorizer,如下 import nltk from pattern.es import lemma f
目前,我有一个 CountVectorizer 函数 CountVectorizer(stop_words=stopwords.words('spanish'),token_pattern=r'(?u
我正在清理文本,然后将其传递给 CountVectorizer 函数,以计算每个单词在文本中出现的次数。问题在于它将 10,000x 视为两个单词(10 和 000x)。同样,对于 5.00,它将 5
我是一名优秀的程序员,十分优秀!