尝试通过 Twitter 预测用户个性时,文本分类的准确性低
Posted
技术标签:
【中文标题】尝试通过 Twitter 预测用户个性时,文本分类的准确性低【英文标题】:Low accuracy with Text Classification while trying to predict user's personality via Twitter 【发布时间】:2017-08-01 18:57:52 【问题描述】:我正在做一个项目,使用他的推文预测用户的个性。
对于训练,我有一个包含 350000 条已接受性格测试的用户推文的大型语料库,每条推文都与特定的性格类型相关联。 有16种不同的性格类型(1-16)
我已经对这条推文进行了预处理,以删除停用词、词干和词性标记。
我有一个包含 500 个最常用单词的大型字典,我将使用它们作为我的训练特征。 在此之后,我使用预定义的 500 个单词的字典对每条推文执行 tfidf 向量化,为每条推文创建一个词向量。
vectorizer=TfidfVectorizer(vocabulary=mydict,min_df=1)
x=vectorizer.fit_transform(corpus).toarray()
corpus 是所有推文的列表。
然后,我将 x
和 y
(每条推文 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%。
是否有任何有效的方法来运行这种多类文本分类,或者我做错了什么? 准确率太低,我想改进它。
【问题讨论】:
每个班级有多少个例子? 没数过,但我敢肯定每个班级至少有 15000 人。我会计算并回复你。 另外,如果您使用更多示例进行训练而不是测试会更好。您提到训练和测试数据点是平分秋色的。尝试使用 80:20、70:30 等(训练:测试比例)。此外,您是否尝试过调整每种算法的参数?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
每个分类的样本数。
既然 Myers-Briggs 的四个因子是独立的,为什么不为每个因子训练一个分类器,然后给出组合结果呢? IE。为 Introvert vs Extravert 训练一个分类器,Intuitive vs Sensing 训练另一个分类器,等等。
【参考方案1】:
问题可能是您使用的数据集不平衡。
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
不平衡的数据,是指类的表示不均等的问题。有许多技术可用于处理这种现象。
收集更多数据
如果可能,请尝试为具有少量示例的类收集更多数据。
使用其他性能指标
准确性不是当您的数据集不平衡时可以使用的指标。假设您有两个类(0
和 1
),其中 99 个示例属于 class 0
,只有 1 个示例属于 class 1
。如果您构建一个始终为每个测试点分配class 0
的模型,您最终将获得 99% 的准确率,但显然这不是您想要的。除了准确性之外,一些有用的指标如下:
欠采样
尝试从您最流行的课程中舍弃示例,以便所有课程的示例数量大致相同。丢弃数据可能不是一个好主意,因此请尽量避免采样不足。
【讨论】:
0。 4350 ENTJ 1. 4132 INTJ 2. 3810 INTP 3. 3804 ENFJ 4. 3709 ISTJ 5. 3697 ISTP 6. 3646 ISFJ 7. 3608 INFP 8. 3475 ESFJ 9. 3472 ESTP 10. 3355 INFJ 11. 3299 INFJ 13. 3238 ENFP 14. 3190 ESTJ 15. 1919 ENTP 新数据集是平衡的。没有算法能提供比 15% 更好的准确度 仍然不平衡。使用完全相同数量的示例。以上是关于尝试通过 Twitter 预测用户个性时,文本分类的准确性低的主要内容,如果未能解决你的问题,请参考以下文章