所以我正在使用这个数据集: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。
您描述的一些方法具有超参数,这可以显着改变模型的性能。对于 KNeighborsClassifier 来说,参数
k
非常重要。通常,人们会使用 k 折交叉验证等方法执行某种参数优化。这是为您的数据找到最佳参数集所必需的。
您可以使用 GridSearchCV 来实现此目的。在文档中,还有一个支持向量机的示例。