我建立了一个二进制文本分类器。训练它基于“新”或“返回”识别客户的句子。我的问题是,即使对于阅读句子的实际人员,真实数据也不一定总是在新数据或返回数据之间有明确的区分。 使用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
因此,我知道不相信这些工具的指标会低于某个百分比,因为该工具不可靠。
答案 0 :(得分:0)
您可以使用predict_proba()代替predict()。这将为您提供每个可能标签的预测概率估计。
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html