Я построил двоичный текстовый классификатор. Обучил его распознавать предложения для клиентов на основе «Нового» или «Возврата». Моя проблема в том, что реальные данные не всегда могут иметь четкое различие между новым или возвращаемым, даже фактическому человеку, читающему предложение. Моя модель была обучена с точностью 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
Поэтому я бы знал, что не доверяют этим показателям ниже определенного процента, потому что инструмент ненадежен.