使用带有TF-IDF的管道时,CalibratedClassifierCV存在错误



首先提前感谢,我真的不知道是否应该打开一个问题,所以我想检查一下是否有人以前遇到过这种情况。

因此,当使用CalibratedClassifierCV进行文本分类时,我遇到了以下问题。我有一个估计器,它是以这种方式创建的管道(简单示例):

# Import libraries first
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import make_pipeline
from sklearn.calibration import CalibratedClassifierCV
from sklearn.linear_model import LogisticRegression
# Now create the estimators: pipeline -> calibratedclassifier(pipeline)
pipeline = make_pipeline( TfidfVectorizer(), LogisticRegression() )
calibrated_pipeline = CalibratedClassifierCV( pipeline, cv=2 )

现在我们可以创建一个简单的训练集来检查分类器是否工作:

# Create text and labels arrays
text_array = np.array(['Why', 'is', 'this', 'happening'])
outputs = np.array([0,1,0,1])

当我尝试拟合calibrated_pipeline对象时,我会得到以下错误:

值错误:发现样本数不一致的输入变量:[1,4]

如果你愿意,我可以复制整个异常跟踪,但这应该很容易复制。提前感谢!

编辑:我在创建数组时犯了一个错误。现已修复(感谢@ogrisel!)此外,正在调用:

pipeline.fit(text_array, outputs)

工作正常,但使用校准的分类器执行此操作失败

np.array(['Why', 'is', 'this', 'happening']).reshape(-1,1)是一个2D字符串数组,而TfidfVectorizer类的fit_transform方法的docstring声明它所期望的:

Parameters
----------
raw_documents : iterable
an iterable which yields either str, unicode or file objects

如果你迭代你的2D numpy数组,你会得到一个字符串的1D数组序列,而不是直接的字符串:

>>> list(text_array)
[array(['Why'], 
dtype='<U9'), array(['is'], 
dtype='<U9'), array(['this'], 
dtype='<U9'), array(['happening'], 
dtype='<U9')]

所以修复很容易,只需通过:

text_documents = ['Why', 'is', 'this', 'happening']

作为矢量器的原始输入。

编辑:备注:默认情况下,LogisticRegression几乎总是一个校准良好的分类器。在这种情况下,CalibratedClassifierCV很可能不会带来任何东西。

相关内容

  • 没有找到相关文章

最新更新