首页 > 解决方案 > 在多标签分类中拆分训练和测试以避免训练集中的数据丢失

问题描述

我有一个由两列组成的数据集(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 行中使用。(意思是,它们只分配给一个摘要)

因此,我认为,当我在训练和测试中拆分数据集时,一些“孤独的关键字”会进入测试数据集,但不会进入训练数据集。因此,模型永远不会在它们上进行训练。

这就是我的准确率如此低的原因吗?

还是我做错了什么?

标签: machine-learning

解决方案


我想这可能是因为您没有大量数据用于您尝试获取的所有不同类。如果您正在用两个类训练某些东西,那么每个类都需要数千个文本。也许你没有那个。

民事诉讼程序和民事证据也被视为您的不同类别。我想如果你将它们全部归结化并制作更小的类别(例如将这两个作为“公民”加入)你可以获得更好的结果吗?


推荐阅读