python - 对高于置信度阈值的 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 是否可行,如果是这样,有人对如何做到这一点有建议吗?另外,如果有人对我如何使我的模型更准确有建议?
解决方案
除非您运行分类器,否则您不会知道置信度分数是多少。所以你可以运行分类器,查看分数,然后决定哪些会自动接受,哪些需要人工审核。
关于如何提高准确性的第二个问题,您可以做几件事。
- 尝试使用更复杂的技术(例如词嵌入)来矢量化您的数据。你一定会看到更好的结果。
- 尝试使用不同的分类器,看看哪一个给你最好的结果。
另外,可以看看predict_proba
功能以获得信心。
推荐阅读
- django - Django 在尝试创建 postgresql 数据库时抛出“[12728] 错误:CREATE DATABASE 无法在事务块内运行”
- sql - 这两个存储过程之间是否存在功能差异?
- java - 为什么我的 java 应用程序在服务器上看不到 mariadb 驱动程序,即使它在本地运行良好?
- python - 绘制 dataFrame 中所有值的直方图
- python - 删除 Pandas 列中所有大于一的空格
- javascript - 学习 JS ......似乎被困在这个练习中......不知道我做错了什么
- tensorflow - Pytorch Autograd:运行时错误“只能为标量输出隐式创建grad”是什么意思
- json - 如何在 Angular 中的页面加载时发出 HTTP 请求(使用按钮)
- apache-flink - 如何获取 Flink 保存点 ID?
- jolt - 如何使用 Jolt 更改大型 Json 中一个字段的名称