sklearn.pipeline如何工作,手动进行?

时间:2019-06-26 06:44:27

标签: python scikit-learn

当前,我正在研究sklearn.pipeline,这非常棒,这是一个示例:

model = make_pipeline(TfidfVectorizer(), MultinomialNB())
model.fit(train.data, train.target)
labels = model.predict(test.data)

(*数据来自train = fetch_20newsgroups(subset='train', categories=categories)) 与categories= ['talk.religion.misc', 'soc.religion.christian', 'sci.space','comp.graphics']

但是,我的理解仍然很模糊。我想问一下,如果我们在没有管道的情况下一步一步地做到这一点,那将是怎样的。这只是我想做的,但失败了。

from sklearn.datasets import fetch_20newsgroups
Categories = ['talk.religion.misc', 'soc.religion.christian', 'sci.space','comp.graphics']
train = fetch_20newsgroups(subset='train', categories=categories)`

from sklearn.feature_extraction.text import TfidfVectorizer
model1=TfidfVectorizer()
X=model1.fit_transform(train.data)

from sklearn.naive_bayes import MultinomialNB
model2=MultinomialNB
model2.fit(....)

到目前为止,我只是不知道下一步该怎么做,因为X的形状不适合model2

有关此的更多信息,请从this链接转到该书 在第(406/548)页

*** 请原谅我的愚蠢问题。我知道我可以通过使用管道来做到这一点,但只想尝试

1 个答案:

答案 0 :(得分:1)

您快到了!您需要使用MultinomialNB()而不是MultinomialNB

尝试以下过程。

from sklearn.datasets import fetch_20newsgroups
Categories = ['talk.religion.misc', 'soc.religion.christian', 'sci.space','comp.graphics']
train = fetch_20newsgroups(subset='train', categories=categories)


from sklearn.feature_extraction.text import TfidfVectorizer
model1=TfidfVectorizer()
X=model1.fit_transform(train.data)

from sklearn.naive_bayes import MultinomialNB
model2=MultinomialNB()
model2.fit(X, train.target)
model2.predict(model1.transform(test.data))

# array([2, 1, 1, ..., 2, 1, 1])