获得线性SVC的完美ROC-AUC分数

时间:2018-02-14 11:36:02

标签: scikit-learn svm sentiment-analysis roc auc

我正在为我的情绪分析模型评估不同的分类器。我正在研究所有可用的指标,虽然大多数都达到类似的精确度,召回率,F1分数和ROC-AUC分数,但线性SVM似乎获得了完美 ROC-AUC分数。请看下面的图表:

enter image description here

缩写:MNB =多项式朴素贝叶斯,SGD =随机梯度下降,LR = Logistic回归,LSVC =线性支持向量分类

以下是LSVC的其余性能指标,它们与其他分类器非常相似:

             precision    recall  f1-score   support

        neg       0.83      0.90      0.87     24979
        pos       0.90      0.82      0.86     25021

avg / total       0.87      0.86      0.86     50000

正如您所看到的,数据集是针对pos和neg注释进行平衡的。

以下是相关代码:

def evaluate(classifier):
    predicted = classifier.predict(testing_text)
    if isinstance(classifier.steps[2][1], LinearSVC):
        probabilities = np.array(classifier.decision_function(testing_text))
        scores = probabilities
    else:
        probabilities = np.array(classifier.predict_proba(testing_text))
        scores = np.max(probabilities, axis=1)

    pos_idx = np.where(predicted == 'pos')
    predicted_true_binary = np.zeros(predicted.shape)
    predicted_true_binary[pos_idx] = 1
    fpr, tpr, thresholds = metrics.roc_curve(predicted_true_binary, scores)
    auc = metrics.roc_auc_score(predicted_true_binary, scores)

    mean_acc = np.mean(predicted == testing_category)
    report = metrics.classification_report(testing_category, predicted)
    confusion_matrix = metrics.confusion_matrix(testing_category, predicted)

    return fpr, tpr, auc, mean_acc, report, confusion_matrix

我使用predict_proba除了使用LSVC的{​​{1}}之外的所有分类符(因为它没有decision_function方法)

发生了什么事?

  

编辑:根据@Vivek Kumar的评论改变:

predict_proba

现在生成此图表:

enter image description here

1 个答案:

答案 0 :(得分:-1)

我认为比较的方法是predict_proba和decision_function之类的。 docs中LSVC决策函数的第一句"预测样本的置信度分数。"不得被视为"预测概率"。第二句话澄清了它,它类似于一般SVC.

的决策函数

您可以将predict_proba用于带有sklearn的线性SVC;那么你需要在一般的SVC下将内核特定为' linear'。但是,您正在改变引擎盖下的实现(远离" LIBLINEAR")。