【发布时间】:2018-06-29 00:51:55
【问题描述】:
对于一个课堂项目,我有一组推文,分为 3 种类型的言论:仇恨、常规和攻击性。我的目标是最终训练分类器从数据中预测正确类型的推文。
我有一个整齐的格式(每行一个单词)的数据,其中包含每个单词的 TF-IDF 分数。我已经用星号审查了冒犯性的语言:
> tfidf_words
# A tibble: 34,717 x 7
speech tweet_id word n tf idf tf_idf
<fct> <int> <chr> <int> <dbl> <dbl> <dbl>
1 hate 24282747 reason 1 0.25 5.69 1.42
2 hate 24282747 usd 1 0.25 8.73 2.18
3 hate 24282747 bunch 1 0.25 5.60 1.40
4 hate 24282747 ****** 1 0.25 5.21 1.30
5 hate 24284443 sand 1 0.5 4.76 2.38
6 hate 24284443 ****** 1 0.5 2.49 1.24
7 hate 24324552 madden 1 0.111 8.73 0.970
8 hate 24324552 call 1 0.111 4.11 0.456
9 hate 24324552 ****** 1 0.111 2.05 0.228
10 hate 24324552 set 1 0.111 5.90 0.655
# ... with 34,707 more rows
为了限制我的训练特征空间的大小,我想根据它们的 TF-IDF 分数获得每种语音类型的前“n”个唯一词。
我的vocabulary 是为我的特征空间选择的所有唯一词的向量,定义为vocabulary <- unique(feature_space$word)
在我的程序中,我使用SENTIMENT_SIZE 来定义我想要在模型中使用的每种语音类型的字数。
这两个我都试过了:
feature_space <- tfidf_words %>%
arrange(desc(tf_idf)) %>%
group_by(speech) %>%
slice(1:SENTIMENT_SIZE) %>%
ungroup() %>%
arrange(tweet_id)
还有这个:
feature_space <- tfidf_words %>%
group_by(speech) %>%
top_n(n = SENTIMENT_SIZE, wt = tf_idf) %>%
ungroup()
这两个“有点”工作,但他们都没有按照我想要的方式处理重复。例如,如果我将 SENTIMENT_SIZE 设置为 100,我希望看到从每种语音类型中选择的 100 个唯一单词,总共 300 个单词。
相反,我们对方法 1 有以下结果:
> length(vocabulary)
[1] 248
方法 2 的结果如下:
> length(vocabulary)
[1] 293
我该怎么做:
- 确保每个语音组中没有选择重复的单词,并且...
- 确保每个组中选择的单词与其他组中的单词不同?
【问题讨论】:
-
你可以在
group_by之后使用unique(word)或distinct(word) -
@A.Suliman 你能举个例子吗?在
group_by之后我将如何使用它?