我正在做一个项目,通过用户的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的列表。
然后,我将这个x
和y
(每个tweet有1-16个类),使用:
我使用这个(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%。在
有没有什么有效的方法来运行这种多类文本分类,或者是我做错了什么? 准确度太低了,我想改进一下。在
问题可能是您使用的数据集不平衡。在
不平衡数据,指的是类的表示不相等的问题。有许多技术可以用来处理这种现象。在
收集更多数据
如果可能的话,试着用几个例子来收集更多的类数据。
使用其他性能指标
当数据集不平衡时,精度不是一个可以使用的指标。假设您有两个类(
0
和1
),其中99个示例属于class 0
,只有一个示例属于class 1
。如果您构建的模型总是将class 0
分配给每个测试点,那么最终您将获得99%的准确率,但显然这不是您想要的。除准确度外,其他一些有用的指标如下:欠采样
试着从最流行的类中删除示例,以便所有类的示例数量大致相同。丢弃数据可能不是个好主意,所以尽量避免欠采样。
相关问题 更多 >
编程相关推荐