machine-learning - 在多标签分类中拆分训练和测试以避免训练集中的数据丢失
问题描述
我有一个由两列组成的数据集(600 行):
-Summary:其中包含文档的文本
-Keywords:其中包含标识该文档的关键字。
Summary KeyWords_in_Array_wo_insurance
0 court sanction scheme transfer insur reinsur b... [insolvency]
1 immedi custodi sentenc month week impos direct... [administration of justice, civil evidence, se...
2 motorist injur hit run collis car identifi dri... [negligence, road traffic]
3 claimant given permiss continu claim compani a... [insolvency, civil procedure]
4 court gave guidanc approach taken applic relea... [civil procedure, costs]
5 plaintiff solicitor entitl declar life critic ... [trusts]
6 claimant insur establish requir standard road ... [personal injury, torts]
7 minimum indemn requir institut charter account... [arbitration, civil procedure, costs, accounta...
8 applic secur cost court could take account eve... [civil procedure, insolvency, cpr, costs]
我想预测哪些关键字标识了摘要。关键字不是互斥的。
我的代码是:
X_train, X_test, y_train, y_test = train_test_split(df_final["Summary"], df_final["KeyWords_in_Array_wo_insurance"], test_size=0.20, random_state=42)
mlb = MultiLabelBinarizer()
y_train_mlb = mlb.fit_transform(y_train)
classifier = Pipeline([
('vectorizer', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])
classifier.fit(X_train, y_train_mlb)
y_predicted = classifier.predict(X_test)
all_labels = mlb.inverse_transform(y_predicted)
y_test_mlb = mlb.transform(y_test)
print("Accuracy = ", accuracy_score(y_test_mlb,y_predicted))
我的准确度分数很低:20%
因此,我认为我的分类不够好。
原因可能是某些关键字只使用一次。例如,关键字“动物”或“伙伴关系”或“继承”仅在 1 行中使用。(意思是,它们只分配给一个摘要)
因此,我认为,当我在训练和测试中拆分数据集时,一些“孤独的关键字”会进入测试数据集,但不会进入训练数据集。因此,模型永远不会在它们上进行训练。
这就是我的准确率如此低的原因吗?
还是我做错了什么?
解决方案
我想这可能是因为您没有大量数据用于您尝试获取的所有不同类。如果您正在用两个类训练某些东西,那么每个类都需要数千个文本。也许你没有那个。
民事诉讼程序和民事证据也被视为您的不同类别。我想如果你将它们全部归结化并制作更小的类别(例如将这两个作为“公民”加入)你可以获得更好的结果吗?
推荐阅读
- angular - Observable 加载一次,导航离开和返回后为空
- python-3.x - " samples: %r" % [int(l) for l in lengths]) ValueError: 发现样本数量不一致的输入变量:[219870, 0, 0]
- c# - 在 ASP.NET Core 3.1 MVC 中修改和重新设计登录页面 html
- node.js - NodeJs:将 try-Catch 语句与 NET 库的连接一起使用
- matlab - 在线生成特定矩阵
- c++ - 如何更改我的统一缓冲区以动态工作?
- javascript - 在 JavaScript 中从 HTML 中提取文本数组
- angular - 无法读取角度未定义的属性“值”
- php - 没有从 Firestore 检索到文档
- r - 在R中的混淆矩阵上设置颜色