用于文本分类的一类 SVM 模型 (scikit-learn)

Myt*_*han 5 machine-learning python-3.x scikit-learn text-classification one-class-classification

我正在尝试对一组文本进行分类,以用于预测测试文本集中的相似文本。我正在使用 one_class_svm 模型。“author_corpus”包含由单个作者撰写的文本列表,“test_corpus”包含由其他作者和原作者撰写的文本列表。我尝试使用 one_class_svm 来识别测试文本中的作者。

def analyse_corpus(author_corpus, test_corpus):

    vectorizer = TfidfVectorizer()

    author_vectors = vectorizer.fit_transform(author_corpus)
    test_vectors = vectorizer.fit_transform(test_corpus)

    model = OneClassSVM(gamma='auto')

    model.fit(author_vectors)

    test = model.predict(test_vectors)
Run Code Online (Sandbox Code Playgroud)

我收到值错误:

X.shape[1] = 2484 should be equal to 1478, the number of features at training time
Run Code Online (Sandbox Code Playgroud)

考虑到训练集中的单个作者,我如何实现这个模型来准确预测测试集中文本的作者身份?任何帮助表示赞赏。

作为参考,这里是 one_class_svm 模型指南的链接: https: //scikit-learn.org/stable/modules/ generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM

muj*_*iga 5

您应该在数据fit上(训练)模型train,并使用训练后的模型对数据进行预测test

  • fit:拟合(训练)模型
  • fit_transform:拟合模型然后进行预测
  • transform: 进行预测

你犯的错误是

test_vectors = vectorizer.fit_transform(test_corpus)

使用示例

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer

train = fetch_20newsgroups(subset='train', categories=['alt.atheism'], shuffle=True, random_state=42).data
test =  fetch_20newsgroups(subset='train', categories=['alt.atheism', 'soc.religion.christian'], shuffle=True, random_state=42).data

vectorizer = TfidfVectorizer()
train_vectors = vectorizer.fit_transform(train)
test_vectors = vectorizer.transform(test)

model = OneClassSVM(gamma='auto')
model.fit(train_vectors)

test_predictions = model.predict(test_vectors)
Run Code Online (Sandbox Code Playgroud)