为什么我的多标签文本分类准确率低?
我正在使用这个数据集: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}
所以我想问,
为什么我的准确率这么低?
怎么才能提高准确率?
我试着用LogisticRegression、KNeighborsClassifier、DecisionTreeClassifier、GaussianNB、MultinomialNB和RandomForestClassifier这些模型进行切换。此外,我还用BinaryRelevance、ClassifierChain和LabelPowerset这些机器学习方法来替换每个模型。我还没有尝试使用神经网络模型或BERT。
1 个回答
0
你提到的一些方法有超参数,这些超参数会对模型的表现产生很大影响。以KNeighborsClassifier为例,其中的参数k
非常重要。通常,我们会进行一些参数优化,比如使用k折交叉验证。这是为了找到最适合你数据的参数组合。
你可以使用GridSearchCV来实现这一点。在文档中,还有一个关于支持向量机的例子。