gpt4 book ai didi

python - FeatureUnion ,管道分类特征与 tfidf 特征抛出错误

转载 作者:行者123 更新时间:2023-11-30 09:32:06 24 4
gpt4 key购买 nike

我正在尝试连接 tfidf 的特征和其他分类特征,以对结果数据集执行分类。从各种博客中我了解到,FeatureUnion 可用于连接特征,然后将其管道化到算法(在我的例子中为朴素贝叶斯)。

我已按照此链接中的代码 - http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html

当我尝试执行代码时出现错误

TypeError: no supported conversion for types: (dtype('O'),)

下面是我尝试执行的代码:

class textdata():
def transform(self, X, Y):
return X[desc]

def fit(self, X, Y):
return self

class one_hot_trans():
def transform(self, X, Y):
X = pd.get_dummies(X, columns=obj_cols)
return X
def fit(self, X, Y):
return self

pipeline = Pipeline([
('features', FeatureUnion([

('ngram_tf_idf', Pipeline([
('text', textdata()),
('tf_idf', TfidfTransformer())
])),
('one_hot', one_hot_trans())
])),
('classifier', MultinomialNB())
])


d_train, d_test, y_train, y_test = train_test_split(data, data[target], test_size=0.2, random_state = 2018)
pipeline.fit(d_train, y_train)

谁能帮我解决这个错误。

注意:数据共有 9 列,其中 1 个目标变量(分类)和 1 个文本列(我想在其上执行 tfidf),其余为分类(上面代码中的 obj_cols)。

编辑:谢谢维韦克。我没有注意到这一点。我错误地使用了变压器而不是矢量化器。即使更换后,我仍然遇到以下错误。

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\pipeline.py in _fit_transform_one(transformer, weight, X, y, **fit_params)
579 **fit_params):
580 if hasattr(transformer, 'fit_transform'):
--> 581 res = transformer.fit_transform(X, y, **fit_params)
582 else:
583 res = transformer.fit(X, y, **fit_params).transform(X)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\pipeline.py in fit_transform(self, X, y, **fit_params)
745 self._update_transformer_list(transformers)
746 if any(sparse.issparse(f) for f in Xs):
--> 747 Xs = sparse.hstack(Xs).tocsr()
748 else:
749 Xs = np.hstack(Xs)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\sparse\construct.py in hstack(blocks, format, dtype)
462
463 """
--> 464 return bmat([blocks], format=format, dtype=dtype)
465
466

~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\sparse\construct.py in bmat(blocks, format, dtype)
598 if dtype is None:
599 all_dtypes = [blk.dtype for blk in blocks[block_mask]]
--> 600 dtype = upcast(*all_dtypes) if all_dtypes else None
601
602 row_offsets = np.append(0, np.cumsum(brow_lengths))

~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\sparse\sputils.py in upcast(*args)
50 return t
51
---> 52 raise TypeError('no supported conversion for types: %r' % (args,))
53
54

TypeError: no supported conversion for types: (dtype('float64'), dtype('O'))

编辑::

我已经检查了除描述列之外的所有分类变量中的唯一值,并且我发现测试数据中没有出现训练中不存在的值。难道我做错了什么。

for col in d_train.columns.drop(desc):
ext = set(d_test[col].unique().tolist()) - set(d_train[col].unique().tolist())
if ext: print ("extra columns: \n\n", ext)

编辑2::附加信息 - 提到的 d_train、d_test 功能的详细信息。任何人都可以帮助我在预测方法上仍然遇到“尺寸不匹配”错误。

obj cols::  ['priority', 'ticket_type', 'created_group', 'Classification', 'Component', 'ATR_OWNER_PLANT', 'created_day']
d_train cols:: Index(['priority', 'ticket_type', 'created_group', 'Description_ticket', 'Classification', 'Component', 'ATR_OWNER_PLANT', 'created_day'], dtype='object')
d_test cols:: Index(['priority', 'ticket_type', 'created_group', 'Description_ticket','Classification', 'Component', 'ATR_OWNER_PLANT', 'created_day'], dtype='object')

d_train shape:: (95080, 8)
d_test shape:: (23770, 8)
desc:: Description_ticket

最佳答案

我认为,您还通过 one_hot_trans 函数传递文本列。

您可以尝试使 one_hot_trans 的输出如下所示。

class one_hot_trans():
def transform(self, X, Y):
X = pd.get_dummies(X.drop(desc,axis=1), obj_cols])
return X
def fit(self, X, Y):
return self

关于python - FeatureUnion ,管道分类特征与 tfidf 特征抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53757691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com