为什么这种随机森林情感分类的准确性如此之低?

Why is this accuracy of this Random forest sentiment classification so low?

我想使用 RandomForestClassifier 进行情感分类。 x 包含字符串文本中的数据,因此我使用 LabelEncoder 来转换字符串。 Y 包含数字数据。我的代码是这样的:

import pandas as pd
import numpy as np
from sklearn.model_selection import *
from sklearn.ensemble import *
from sklearn import *
from sklearn.preprocessing.label import LabelEncoder

data = pd.read_csv('data.csv')

x = data['Reviews']
y = data['Ratings']

le = LabelEncoder()
x_encoded = le.fit_transform(x)

x_train, x_test, y_train, y_test = train_test_split(x_encoded,y, test_size = 0.2)

x_train = x_train.reshape(-1,1)
x_test = x_test.reshape(-1,1)

clf = RandomForestClassifier(n_estimators=100)

clf.fit(x_train, y_train)

y_pred = clf.predict(x_test)

然后我打印出如下准确率:

print("Accuracy:", metrics.accuracy_score(y_test, y_pred))

这是输出:

Accuracy: 0.5975

我读到随机森林具有很高的准确性,因为参与该过程的决策树数量众多。但我认为准确度远低于应有的水平。我在 Stack Overflow 上寻找过一些类似的问题,但找不到解决我的问题的方法。

我使用随机森林库的代码有什么问题吗?或者使用随机森林时有没有例外情况?

这不是关于随机森林或库的问题,而是如何将文本输入转换为特征或特征向量的问题。

LabelEncoding 的作用是;给定一些标签,如 ["a"、"b"、"c"],它将这些标签转换为 0 到 n-1 之间的数值,其中 n 是不同输入标签的数量。但是,我假设评论包含文本而不是纯粹的标签。这意味着,您的所有评论(如果不是 100% 相同的话)都将转换为不同的标签。最终,这会导致你的分类器做随机的事情。给出那个输入。这意味着您需要一些不同的东西来将您的文本输入转换为随机森林可以处理的数字输入。

作为一个简单的开始,您可以尝试像 TfIDF 这样的东西或者一些简单的计数向量化器。这些可以从 sklearn https://scikit-learn.org/stable/modules/feature_extraction.html 第 6.2.3 节中获得。文本特征提取。有更复杂的方法可以将文本转换为数字向量,但这应该是您了解概念上必须发生的事情的良好开端。

最后一个重要说明是,您仅将这些矢量化器用于训练集,而不是整个数据集。否则,您可能会将训练中的信息泄露给 evaluation/testing。这样做的一个好方法是构建一个由特征转换步骤和分类器组成的 sklearn 管道。