【发布时间】:2017-12-05 21:41:33
【问题描述】:
感谢您花时间阅读我的问题!
所以我正在进行一项实验,看看我是否可以根据他们在推文中使用的词(或标记)来预测个人是否被诊断出患有抑郁症(或者至少说他们已经被诊断出患有抑郁症)。我发现有 139 位用户在某些时候发推文说“我被诊断出患有抑郁症”或在认真的语境中使用该短语的某些变体(例如,不是开玩笑或讽刺。使用了以推文语言为母语的人来辨别所发布的推文是否真实)。
然后我收集了所有这些用户推文的整个公共时间线,给了我一个大约 17000 条推文的“抑郁用户推文语料库”。
接下来,我创建了一个包含大约 4000 个随机“控制”用户的数据库,并根据他们的时间线创建了一个包含大约 800,000 条推文的“控制推文语料库”。
然后我将它们组合成一个大数据框,如下所示:
,class,tweet
0,depressed,tweet text .. *
1,depressed,tweet text.
2,depressed,@ tweet text
3,depressed,저 tweet text
4,depressed,@ tweet text????
5,depressed,@ tweet text????
6,depressed,@ tweet text ?
7,depressed,@ tweet text ?
8,depressed,tweet text *
9,depressed,@ tweet text ?
10,depressed,@ tweet text
11,depressed,tweet text *
12,depressed,#tweet text
13,depressed,
14,depressed,tweet text !
15,depressed,tweet text
16,depressed,tweet text. .
17,depressed,tweet text
...
50595,control,@tweet text?
150596,control,"@ tweet text."
150597,control,@ tweet text.
150598,control,"@ tweet text. *"
150599,control,"@tweet text?"t
150600,control,"@ tweet text?"
150601,control,@ tweet text?
150602,control,@ tweet text.
150603,control,@tweet text~
150604,control,@ tweet text.
然后我使用从 sklearn 库导入的 CountVectorizer() 类中的对象训练了一个多项式朴素贝叶斯分类器:
count_vectorizer = CountVectorizer()
counts = count_vectorizer.fit_transform(tweet_corpus['tweet'].values)
classifier = MultinomialNB()
targets = tweet_corpus['class'].values
classifier.fit(counts, targets)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior= True)
不幸的是,在运行了 6 次交叉验证测试后,结果很糟糕,我正试图找出原因。
Total tweets classified: 613952
Score: 0.0
Confusion matrix:
[[596070 743]
[ 17139 0]]
所以,我没有正确预测一个抑郁者的推文!我最初的想法是我没有正确标准化对照组的计数,因此即使是在抑郁用户语料库中出现得更频繁的标记,由于其更大的尺寸,在控制推文语料库中也出现了过度表示。我的印象是 .fit() 已经这样做了,所以也许我在这里走错了路?如果没有,对在两组不同大小的数据之间进行标准化的最有效方法有何建议?
【问题讨论】:
-
你试过其他分类器吗?
-
@ser 我也将尝试使用伯努利分类器。在这种情况下你会推荐其他的吗?
-
这可能是我探索性数据分析的一部分,我会研究一下。谢谢!
-
当然。试一试。
标签: python-3.x machine-learning scikit-learn nlp sentiment-analysis