在下面的R代码中,我将引入训练数据来创建基于一系列算法(例如,最大熵、SVM等(的模型。
我对算法结果表有问题,因为每个结果都显示了完全相同的输出。
请你能帮助我具体理解为什么每个算法的结果表产生完全相同的输出的原因吗?
R代码中应用的数据集
#Load Libraries
library(RTextTools) #RTextTools available for 3.4.1
library(e1071)
library(gmodels)
setwd(directory/path)
text= read.csv("matrixdata.csv", header = FALSE)
# build dtm
matrix= create_matrix(text[,1])
mat = as.matrix(matrix)
# build the data to specify response variable, training set, testing set.
container = create_container(mat, as.numeric(as.factor(text[,2])),
trainSize=1:1200, testSize=1201:1500,virgin=FALSE)
models = train_models(container, algorithms=c("MAXENT" , "SVM", "RF", "BAGGING", "TREE"), set_heldout = 300)
results = classify_models(container, models)
#Why is the below producing the same output for each algorithm?
table(as.numeric(as.factor(text[1201:1500, 2])), results[,"FORESTS_LABEL"])
table(as.numeric(as.factor(text[1201:1500, 2])), results[,"MAXENTROPY_LABEL"])
table(as.numeric(as.factor(text[1201:1500, 2])), results[,"SVM_LABEL"])
table(as.numeric(as.factor(text[1201:1500, 2])), results[,"BAGGING_LABEL"])
table(as.numeric(as.factor(text[1201:1500, 2])), results[,"TREE_LABEL"])
这是每个表产生的相同结果:
1 2 3
1 125 18 0
2 31 70 2
3 25 17 12
1 = Negative,
2 = Neutral,
3 = Positive,
为什么每个算法的上表都产生相同的结果
在上面的代码中,我确定了词典的性能根据我的手动分类。
您可以通过比较"数据集"的两列来做到这一点(ML似乎并不相关(。使用混淆矩阵,例如:
library(caret)
text= read.csv("matrixdata.csv", header = FALSE)
confusionMatrix(text$V1, text$V2)
您可以使用ML来自动进行手动分类。从这个意义上说,你的数据集应该有一个额外的列(我们称之为"句子"(,包含要分类的文本(句子(。
mat= create_matrix(text$sentence)
container = create_container(mat, as.numeric(as.factor(text[,1])),
trainSize=1:1200, testSize=1201:1500,virgin=FALSE)
如果您希望ML模型从中学习,您也可以将词典分类作为标签传递给容器。
下面是一个你可以查看的国会法案分类示例。