首先提前感谢,我真的不知道是否应该打开一个问题,所以我想检查一下是否有人以前遇到过这种情况。
因此,当使用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
很可能不会带来任何东西。