R e1071包中的SVM对于不同的公式表示法产生不同的输出,但数据和参数相同
为了进行Twitter情绪分析,我使用e1071软件包中的SVM函数。 我使用RTextTools包创建了一个文档术语矩阵,并将其分为培训集和测试集。我有一个“train”,它是一个训练观察的数据框架,不包括预测变量。然后我有“sentitrain”,它是与训练集相对应的情感值向量。测试也一样。 然后,我使用了三种不同的方法来拟合支持向量机模型。 首先,我创建了一个容器R e1071包中的SVM对于不同的公式表示法产生不同的输出,但数据和参数相同,r,svm,predict,confusion-matrix,R,Svm,Predict,Confusion Matrix,为了进行Twitter情绪分析,我使用e1071软件包中的SVM函数。 我使用RTextTools包创建了一个文档术语矩阵,并将其分为培训集和测试集。我有一个“train”,它是一个训练观察的数据框架,不包括预测变量。然后我有“sentitrain”,它是与训练集相对应的情感值向量。测试也一样。 然后,我使用了三种不同的方法来拟合支持向量机模型。 首先,我创建了一个容器 trainmat = as.matrix(train) # create container object traincont
trainmat = as.matrix(train)
# create container object
traincontainer = create_container(trainmat,
sentitrain,
trainSize = 1:nrow(trainmat),
virgin = FALSE)
# create test matrix
testmat = as.matrix(test)
testcontainer = create_container(testmat, labels = rep(0, nrow(test)),
testSize = 1:nrow(test), virgin = FALSE)
model <- train_model(traincontainer , "SVM", kernel="radial", cost=400)
results = classify_model(testcontainer, model)
preds = results[,1]
confusionMatrix(table(preds, sentitest))
这给了我大约69%的准确率
第三,我刚刚将数据帧和预测值向量直接传递给函数调用:
model = svm(train, sentitrain, data = train, cost = 400, kernel =
"radial")
preds = predict(model, test)
confusionMatrix(table(preds, sentitest))
这导致了惊人的87%的准确率。
我对每个模型进行了多次交叉验证,以确保这些差异不是由于随机性造成的。
据我所知,我总是使用同一个包中的同一个函数(RTextTools在内部调用e1071中的SVM函数),在相同的数据上使用相同的参数。唯一的区别是我传递这些参数的方式。结果怎么会如此不同
model = svm(train, sentitrain, data = train, cost = 400, kernel =
"radial")
preds = predict(model, test)
confusionMatrix(table(preds, sentitest))