通过Twitter预测用户个性的文本分类准确率低

我正在进行一个项目,利用用户的推文来预测其个性。

在训练过程中,我有一个包含350000条推文的大型语料库,这些推文来自已经进行过个性测试的用户,每条推文都与特定的个性类型相关联。共有16种不同的个性类型(1-16)。

我对这些推文进行了预处理,删除了停用词,进行了词干提取和词性标注。

我有一个包含500个最常用词的大型词典,这些词将作为我的训练特征。随后,我使用预定义的500个词的词典对每条推文进行了tfidf向量化处理,以创建每条推文的词向量。

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

其中corpus是一系列所有推文的列表。然后我将这个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是csv文件中Y所在的列名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个示例属于类别0,只有1个示例属于类别1。如果你构建一个模型,总是将每个测试点分配给类别0,你最终会得到99%的准确率,但显然这不是你想要的。除了准确率之外,一些有用的指标包括以下内容:

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

    尝试从最常见的类别中丢弃一些示例,以便所有类别拥有大致相同数量的示例。丢弃数据可能不是一个好主意,所以尽量避免欠采样。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注