【问题标题】:One class SVM model for text classification (scikit-learn)用于文本分类的一类 SVM 模型(scikit-learn)
【发布时间】:2020-06-13 04:34:32
【问题描述】:

我正在尝试对一组文本进行分类,以用于预测测试文本集中的相似文本。我正在使用 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)

我收到值错误:

X.shape[1] = 2484 should be equal to 1478, the number of features at training time

在给定训练集中的单一作者的情况下,我如何实现此模型以准确预测测试集中文本的作者身份?任何帮助表示赞赏。

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

【问题讨论】:

    标签: python-3.x machine-learning scikit-learn text-classification one-class-classification


    【解决方案1】:

    您应该在train 数据上fit(训练)模型,并使用训练后的模型在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)
    

    【讨论】:

    • 您好,感谢您的回复。这次可以了,但是我将如何打印测试集中由同一作者编写的文本?
    • 我还遇到了一个问题,即即使文本非常相似,每个预测都会导致 -1(异常值)。我可以做些什么来提高准确性?
    • 在转换为 TFIDF 之前,清理文本,删除停用词,尝试词干提取,并在训练模型之前对 TFIDF 向量进行均值归一化。
    猜你喜欢
    • 2017-10-11
    • 2018-02-11
    • 2012-12-06
    • 2018-04-04
    • 2020-09-25
    • 2018-07-03
    • 2018-03-24
    • 2013-06-12
    • 2018-08-12
    相关资源
    最近更新 更多