文本分类准确率低,同时试图通过Twi预测用户的个性

2024-06-03 07:25:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,通过用户的tweets预测用户的个性。在

为了进行培训,我有一个包含35万条已经参加过个性测试的用户的大量微博,每条微博都与特定的个性类型相关联。 有16种不同的性格类型(1-16)

我已经对这条推文进行了预处理,以删除停止词、词干和词性标记。在

我有一本500个最常用词的大词典,我将用它作为我的训练特色。 在这之后,我对每个tweet执行了tfidf矢量化,使用预定义的500个单词字典为每个tweet创建一个单词向量。在

vectorizer=TfidfVectorizer(vocabulary=mydict,min_df=1)
x=vectorizer.fit_transform(corpus).toarray()

其中corpus是所有tweet的列表。 然后,我将这个xy(每个tweet有1-16个类),使用:

^{pr2}$

我使用这个(350000*500)数据帧作为X,我的1-16个编号的人格类型作为我的Y数据帧(350000*1),它被分成训练和测试,使用:

X=pd.read_csv('vectorized500.csv')
train = X.sample(frac=0.8, random_state=200)
test=X.drop(train.index)
y_train=train["501"] #501 is the column name where Y is in the csv file
y_test=test["501"]
xtrain=train.drop("501",axis=1)
xtest=test.drop("501",axis=1)

但是,不管我运行什么算法,我得到的结果都很差:

model=RandomForestClassifier()
model.fit(xtrain,y_train)
pickle.dump(model, open('rf1000.sav', 'wb'))
print(model.score(xtest,y_test))

如果我运行RandomForestClassifier,我得到52%的准确率。在

如果我运行naivebayes,Logistic回归或线性支持向量机,我得到的准确率低于20%。在

有没有什么有效的方法来运行这种多类文本分类,或者是我做错了什么? 准确度太低了,我想改进一下。在


Tags: csv数据用户test类型modeltraincorpus
1条回答
网友
1楼 · 发布于 2024-06-03 07:25:44

问题可能是您使用的数据集不平衡。在

0. 56887 INFP 1. 54607 INFJ 2. 52511 INTJ 3. 52028 ENFP 4. 24294 INTP 5. 19032 ENTJ 6. 14284 ENFJ 7. 12502 ISFJ 8. 12268 ISTP 9. 10713 ISTJ 10. 10523 ESFP 11. 8103 ESTP 12. 7436 ESFJ 13. 7016 ESTJ 14. 6725 ISFP

不平衡数据,指的是类的表示不相等的问题。有许多技术可以用来处理这种现象。在

  1. 收集更多数据

    如果可能的话,试着用几个例子来收集更多的类数据。

  2. 使用其他性能指标

    当数据集不平衡时,精度不是一个可以使用的指标。假设您有两个类(01),其中99个示例属于class 0,只有一个示例属于class 1。如果您构建的模型总是将class 0分配给每个测试点,那么最终您将获得99%的准确率,但显然这不是您想要的。除准确度外,其他一些有用的指标如下:

    • 精确度/召回率/F分数(从混淆矩阵中提取)
    • ROC曲线
  3. 欠采样

    试着从最流行的类中删除示例,以便所有类的示例数量大致相同。丢弃数据可能不是个好主意,所以尽量避免欠采样。

相关问题 更多 >