如何在scikit中使用SVM学习分类不同的测试数据以便查看垃圾邮件检测

时间:2015-03-27 17:50:27

标签: python scikit-learn svm spam

我正在使用scikit中的SVM查看垃圾邮件检测。对于这项任务,我正在使用每个400的真实和欺骗性评论的黄金标准数据集。现在我已经做了迄今为止训练和测试这个相同数据集的分割并找到准确性。

现在我想使用这个数据集训练我的SVM分类器,然后想要将我新下载的测试数据分类为与原始数据集不同。

我该怎么做这个任务。到目前为止我的代码是:

def main():
        init();
        dir_path ='C:\spam\hotel-reviews'
        files = sklearn.datasets.load_files(dir_path)
        model = CountVectorizer()
        X_train = model.fit_transform(files.data)

       tf_transformer = sklearn.feature_extraction.text.TfidfTransformer(use_idf=True).fit(word_counts)
        X = tf_transformer.transform(word_counts)
        #print X
        print '\n\n'

    # create classifier
        clf = sklearn.svm.LinearSVC()
    # test the classifier
        test_classifier(X, files.target, clf, test_size=0.2, y_names=files.target_names, confusion=False)

def test_classifier(X, y, clf, test_size=0.3, y_names=None, confusion=False):
    #train-test split
    X_train, X_test, y_train, y_test = sklearn.cross_validation.train_test_split(X, y, test_size=test_size)

    clf.fit(X_train, y_train)
    y_predicted = clf.predict(X_test)

    print sklearn.metrics.classification_report(y_test, y_predicted, target_names=y_names)

if __name__ == '__main__':
    main()

现在我想使用上面训练过的分类器在reviews.txt文件中对我自己的500条评论的不同评论数据进行分类,那么我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

要为数据评分,需要两个步骤。 要么返回clf并使用单独的方法进行评分,要么可以在同一方法中使用。这是工作流程

def scoreData(clf): 
    x_for_predict = loadScoringData("reviews.txt") # Signature only. assuming same data format without target variable 
    y_predict = clf.predict(x_for_predict)
    plotResults(clf, y_predict)# just a signature.