对高于置信度阈值的NLP解决方案进行分类

时间:2019-02-08 10:58:53

标签: python scikit-learn nlp

我有一个数据框all_data,其中包含两列:Event_Summary:这是事件的文本描述,Impact是分类。我已使用SVM对数据进行自动分类-请参见下面的代码:

train, test = train_test_split(all_data, test_size=0.2)

count_vect = CountVectorizer(stop_words='english', analyzer = "word")
X_train_counts = count_vect.fit_transform(train.Event_Summary)

tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)

y_train = train["Impact"]
y_test = test["Impact"]

X_test_counts = count_vect.transform(test.Event_Summary)
tf_transformer = TfidfTransformer(use_idf=False).fit(X_test_counts)
X_test_tf = tf_transformer.transform(X_test_counts)

parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = svm.SVC(gamma="scale")
clf = GridSearchCV(svc, parameters, cv=5)
clf.fit(X_train_tf, y_train)

pred = clf.predict(X_test_tf)
score = np.mean(pred == y_test)*100

得分只有70%,考虑到只有两个类别,这是非常低的。由于评分较低,我只想对算法是否在正确的分类基础上的某个置信度阈值之上(如果不确定,让我手动填写)进行分类,就可以对描述进行分类。

使用python / sklearn是否有可能,如果有的话,有人对如何执行此操作有意见吗?另外,如果有人对我如何使模型更准确提出建议?

1 个答案:

答案 0 :(得分:1)

除非运行分类器,否则您将不知道置信度分数是多少。因此,您可以运行分类器,查看得分,然后确定哪一个被自动接受,哪些要通过人工审核。

关于您如何提高准确性的第二个问题,您可以做几件事。

  1. 尝试使用词嵌入等更复杂的技术来矢量化数据。您肯定会看到更好的结果。
  2. 尝试使用不同的分类器,看看哪一个可以为您带来最佳效果。

另外,可以看看predict_proba函数来获得信心。