评估机器学习文本分类器

时间:2019-10-10 21:44:45

标签: python nlp logistic-regression text-classification

我建立了一个二进制文本分类器。训练它基于“新”或“返回”识别客户的句子。我的问题是,即使对于阅读句子的实际人员,真实数据也不一定总是在新数据或返回数据之间有明确的区分。 使用Logistic回归在监督学习下对我的模型进行了0.99%的精度训练。

#train model
def train_model(classifier, feature_vector_train, label, feature_vector_valid,valid_y, is_neural_net=False):
    classifier.fit(feature_vector_train, label)
    predictions = classifier.predict(feature_vector_valid)
    if is_neural_net:
        predictions = predictions.argmax(axis=-1)
    return classifier , metrics.accuracy_score(predictions, valid_y)

# Linear Classifier on Count Vectors
    model, accuracy = train_model(linear_model.LogisticRegression(), xtrain_count, train_y, xtest_count,test_y)
    print (':::  Accuracy on Test Set   :::')
    print ('Linear Classifier, BoW Vectors: ', accuracy)

这将使我的精度为0.998。 现在,我可以传递句子的整个列表来测试该模型,并且如果句子中包含 new return 单词,它将捕获,但是我需要一个评估指标,因为有些句子会由于真实数据一如既往地混乱,因此不可能返回

我的问题是:我可以使用哪些评估指标,以便通过模型传递的每个新句子都显示得分? 现在我只使用以下代码

with open('realdata.txt', 'r') as f:
    samples = f.readlines()
vecs = count_vect.transform(sentence)
visit = model.predict(vecs)
num_to_label= {0:'New', 1:'Return'}
for s, p in zip(sentence, visit):
    #printing each sentence with the predicted label
    print(s + num_to_label[p])

例如,我期望

Sentence                      Visit          (Metric X)
New visit 2nd floor           New             0.95
Return visit Evening          Return          0.98
Afternoon visit North         New             0.43

因此,我知道相信这些工具的指标会低于某个百分比,因为该工具不可靠。

1 个答案:

答案 0 :(得分:0)

您可以使用predict_proba()代替predict()。这将为您提供每个可能标签的预测概率估计。

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html