问题描述
我正在使用朴素贝叶斯预测具有 6 个类别的变量。
公式为:
班级~A+B
其中 A 和 B 是转换为 tf_idf 分数的原始文本变量。
A 和 B 是包含多个单词的文本列。由于一行中的每个单词都有一个单独的 tf_idf 分数,因此 A 和 B 组合可以有多个 tf_idf 分数。
我的方法是首先计算两列中所有单词的 tf_idf 分数,然后将两列的 tf_idf 分数合并到一个数据框对象中,然后删除该数据框中的重复项。
结果是一组 2500 个不同的候选词,这些候选词可能出现也可能不出现在每一行中。
所以我创建了一个 TF_IDF DATA FRAME,有 4114 行(数据大小)和 2500 列,每列对应一个特定单词的 tf_idf 分数。
所以我将高而窄的数据框转换为短而宽的格式。
我正在转换以下数据框:
进入这个数据框:
其中第一个数据框中的行是第二个数据框中的列。
所以本质上,我正在创建一个稀疏矩阵,其中每一行(有一个类列)有 2500 个 tf_idf 分数,对应于该行句子中的 2500 个单词。每个单词都是 TF_IDF 数据框中的一列。
WORDS_LIST <- FINAL_WORDS_COMBINED %>% distinct(word)
dim(WORDS_LIST)
head(WORDS_LIST)
tail(WORDS_LIST)
TF_IDF_DF <- as.data.frame(matrix(data = 0,nrow = nrow(DATA),ncol = nrow(WORDS_LIST)))
dim(TF_IDF_DF)
dim(DATA)
colnames(TF_IDF_DF) <- WORDS_LIST$word
colnames(TF_IDF_DF)
for (i in 1:nrow(TF_IDF_DF)) {
DF = dplyr::filter(FINAL_WORDS_COMBINED,FINAL_WORDS_COMBINED$line == i)
if (nrow(DF) > 0) {
for (k in 1:nrow(DF)) {
tryCatch(for (j in 1:ncol(TF_IDF_DF)) {
if (DF$word[k] == colnames(TF_IDF_DF)[j]){
TF_IDF_DF[i,j] = DF$tf_idf[k]
}
else {
next
}
},error = function(e) e)
}
}
else {
next
}
print(i)
}
在将第一个数据帧转换为第二个数据帧后,数据现在可以进行建模了。
然后我将数据分为训练集和测试集,比例为 80-20%,并使用 2500 个 tf_idf 分数和另一个分类变量作为预测变量,以及具有 6 个类别的 CLASS 变量作为输出来训练算法。
>但是,当我对测试数据使用拟合的朴素贝叶斯模型进行预测时,该模型仅将所有数据归为一类(道路设计),如下面的混淆矩阵所示。
有人可以帮我弄清楚为什么模型将所有内容预测为一个类而不是 6 个独立的类吗?
感谢您的帮助,感谢您的阅读!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)