当前位置: 首页 > 面试题库 >

scikit-learn中的TfidfVectorizer:ValueError:np.nan是无效的文档

莫英喆
2023-03-14
问题内容

我正在使用scikit-learn的TfidfVectorizer从文本数据中提取一些特征。我有一个带分数(可以为+1或-1)和审阅(文本)的CSV文件。我将这些数据放入一个DataFrame中,以便可以运行Vectorizer。

这是我的代码

import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

df = pd.read_csv("train_new.csv",
             names = ['Score', 'Review'], sep=',')

# x = df['Review'] == np.nan
#
# print x.to_csv(path='FindNaN.csv', sep=',', na_rep = 'string', index=True)
#
# print df.isnull().values.any()

v = TfidfVectorizer(decode_error='replace', encoding='utf-8')
x = v.fit_transform(df['Review'])

这是我得到的错误的回溯:

Traceback (most recent call last):
  File "/home/PycharmProjects/Review/src/feature_extraction.py", line 16, in <module>
x = v.fit_transform(df['Review'])
 File "/home/b/hw1/local/lib/python2.7/site-   packages/sklearn/feature_extraction/text.py", line 1305, in fit_transform
   X = super(TfidfVectorizer, self).fit_transform(raw_documents)
 File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 817, in fit_transform
self.fixed_vocabulary_)
 File "/home/b/work/local/lib/python2.7/site- packages/sklearn/feature_extraction/text.py", line 752, in _count_vocab
   for feature in analyze(doc):
 File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 238, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words)
 File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 118, in decode
 raise ValueError("np.nan is an invalid document, expected byte or "
 ValueError: np.nan is an invalid document, expected byte or unicode string.

我检查了CSV文件和DataFrame中是否有被读取为NaN的内容,但找不到任何内容。有18000行,没有一个返回isnanTrue。

这是什么df['Review'].head()样子:

  0    This book is such a life saver.  It has been s...
  1    I bought this a few times for my older son and...
  2    This is great for basics, but I wish the space...
  3    This book is perfect!  I'm a first time new mo...
  4    During your postpartum stay at the hospital th...
  Name: Review, dtype: object

问题答案:

您需要将dtype转换objectunicode字符串,如回溯中明确提到的那样。

x = v.fit_transform(df['Review'].values.astype('U'))  ## Even astype(str) would work

在TFIDF Vectorizer的“文档”页面中:

fit_transform(raw_documents,y = None)

参数:raw_documents:可迭代
的iterable,它产生 strunicodefile对象



 类似资料:
  • scikit-learn 是一个 Python 的机器学习项目。是一个简单高效的数据挖掘和数据分析工具。基于 NumPy、SciPy 和 matplotlib 构建。 Installation 依赖 scikit-learn 要求: Python (>= 2.7 or >= 3.3) NumPy (>= 1.8.2) SciPy (>= 0.13.3) 运行示例需要 Matplotlib >= 1

  • 问题内容: 我试图在Linux Mint 12上安装scikit-learn,但失败了。我从http://pypi.python.org/pypi/scikit- learn/ 下载了该软件包并安装了 然后,我将目录更改为home并启动python2.7 shell。在导入sklearn时,我得到了: 我认为问题出在scipy的空间。这是因为当我做 我得到与Scikit学习相同的错误。 请帮忙。谢

  • scikit-learn 是基于 Python 语言的机器学习工具。 简单高效的数据挖掘和数据分析工具 可供大家在各种环境中重复使用 建立在 NumPy ,SciPy 和 matplotlib 上 开源,可商业使用 - BSD许可证

  • Introduction to Machine Learning with scikit-learn This video series will teach you how to solve Machine Learning problems using Python's popular scikit-learn library. There are 10 video tutorials tot

  • 有人能解释一下(也许用例子)scikit learn中OneVsRestClassifier和MultiOutputClassifier的区别吗? 我已经阅读了文档,并了解我们使用: OneVsRestClassifier——当我们想要进行多类或多标签分类时,它的策略包括为每个类安装一个分类器。对于每个分类器,该类与所有其他类相匹配。(这非常清楚,这意味着多类/多标签分类问题被分解为多个二进制分类

  • 你可以使用 Keras 的 Sequential 模型(仅限单一输入)作为 Scikit-Learn 工作流程的一部分,通过在此找到的包装器: keras.wrappers.scikit_learn.py。 有两个封装器可用: keras.wrappers.scikit_learn.KerasClassifier(build_fn=None, **sk_params), 这实现了Scikit-Le