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

问题描述 投票:2回答:1

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

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

我已对此推文进行了预处理,以删除停用词,词干和POS标记。

我有一个包含500个最常用单词的大型词典,我将用它作为我的训练功能。在此之后,我使用500字的预定义字典在每条推文上执行了tfidf矢量化,为每条推文创建一个字向量。

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%。

如果我运行Naive Bayes,Logistic回归或线性SVM,我的准确率低于20%。

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

python machine-learning svm random-forest text-classification
1个回答
3
投票

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

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个例子属于class 1。如果你建立一个总是将class 0分配给每个测试点的模型,你最终会得到99%的准确率,但显然这不是你想要的。除准确性之外的一些有用指标如下: 精确/召回/ F分数(从混淆矩阵中提取) ROC曲线
  3. 欠 尝试从最流行的类中丢弃示例,以便所有类具有大致相同数量的示例。抛弃数据可能不是一个好主意,所以尽量避免欠采样。
© www.soinside.com 2019 - 2024. All rights reserved.