繁体   English   中英

尝试通过Twitter预测用户个性时,文本分类的准确性较低

[英]Low accuracy with Text Classification while trying to predict user's personality via Twitter

我正在一个项目中,使用他的推文来预测用户的个性。

为了进行培训,我拥有350000条已经进行过性格测试的用户大推文,每个推文都与特定的个性类型相关联。 有16种不同的人格类型(1-16)

我已经对该推文执行了预处理,以删除停用词,词干和POS标签。

我有一本大型词典,其中包含500个最常用的单词,这些单词将用作我的训练功能。 之后,我使用预定义的500个单词的词典对每个tweet执行tfidf矢量化,以为每个tweet创建一个单词向量。

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

语料库是所有推文的列表。 然后,我使用以下方法组合此xy (每个推文1-16个类):

result=np.append(x,y,axis=1)
X=pandas.DataFrame(result)
X.to_csv('vectorized500.csv')

我将这个(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%。

如果我运行朴素贝叶斯,逻辑回归或线性SVM,我得到的准确率将低于20%。

有没有有效的方法来运行这种多类文本分类,或者我做错了什么? 精度太低,我想提高它。

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

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而只有1个示例属于1 class 1 如果您建立一个始终将class 0分配给每个测试点的模型,则最终的准确性将达到99%,但这显然不是您想要的。 以下是一些除准确性以外的有用指标:

    • 精度/召回率/ F得分(从混淆矩阵中提取)
    • ROC曲线
  3. 尝试从最受欢迎的类中丢弃示例,以使所有类的示例数量大致相同。 丢弃数据可能不是一个好主意,因此请尝试避免采样不足。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM