为什么我的多标签文本分类准确率很低?

问题描述 投票:0回答:1

所以我正在使用这个数据集:https://www.kaggle.com/datasets/madhavmalhotra/journal-entries-with-labelled-emotions

此视频作为指导:https://www.youtube.com/watch?v=YyOuDi-zSiI&t=1077s

所以我将 True 的值更改为 1,将 False 的值更改为 0。我还删除了其中实例数低于 30 个的类。因为我只有这些类的文本:

happy                        182
satisfied                    133
calm                          99
calm, happy, satisfied        77
happy, satisfied              73
proud                         62
happy, proud, satisfied       54
excited, happy, satisfied     46
calm, satisfied               42
calm, happy                   41
excited, happy, proud         37
proud, satisfied              33
frustrated                    32
excited, happy                31
excited                       31
Name: Emotions Felt, dtype: int64

我使用此代码在模型和机器学习方法之间进行交换:

def build_model (model,mlb_estimator,xtrain,ytrain,xtest,ytest):
    clf = mlb_estimator(model)
    clf.fit(xtrain,ytrain)
    clf_predictions = clf.predict(xtest)
    acc = accuracy_score(ytest,clf_predictions)
    ham = hamming_loss(y_test,clf_predictions)
    result = {"accuracy":acc,"hamming_score":ham}
    return result

clf_chain_model = build_model(MultinomialNB(),ClassifierChain,X_train,y_train,X_test,y_test)

我得到了准确度:

{'accuracy': 0.1815068493150685, 'hamming_score': 0.2054794520547945}

所以我的问题是,

  1. 为什么我的准确率这么低?

  2. 如何获得更高的准确度?

所以我尝试用 LogisticRegression、KNeighborsClassifier、DecisionTreeClassifier、GaussianNB、MultinomialNB 和 RandomForestClassifier 交换模型。另外,我还将每个模型的机器学习方法替换为 BinaryRelevance、ClassifierChain 和 LabelPowerset。我还没有尝试过使用神经网络模型或 BERT。

python
1个回答
0
投票

您描述的一些方法具有超参数,这可以显着改变模型的性能。对于 KNeighborsClassifier 来说,参数

k
非常重要。通常,人们会使用 k 折交叉验证等方法执行某种参数优化。这是为您的数据找到最佳参数集所必需的。

您可以使用 GridSearchCV 来实现此目的。在文档中,还有一个支持向量机的示例。

© www.soinside.com 2019 - 2024. All rights reserved.