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

0 投票
1 回答
50 浏览
提问于 2025-04-12 07:37

我正在使用这个数据集: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。

1 个回答

0

你提到的一些方法有超参数,这些超参数会对模型的表现产生很大影响。以KNeighborsClassifier为例,其中的参数k非常重要。通常,我们会进行一些参数优化,比如使用k折交叉验证。这是为了找到最适合你数据的参数组合。

你可以使用GridSearchCV来实现这一点。在文档中,还有一个关于支持向量机的例子。

撰写回答