当前,我正在研究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)页
*** 请原谅我的愚蠢问题。我知道我可以通过使用管道来做到这一点,但只想尝试
答案 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])