R e1071包中的SVM对于不同的公式表示法产生不同的输出,但数据和参数相同

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

为了进行Twitter情绪分析,我使用e1071软件包中的SVM函数。 我使用RTextTools包创建了一个文档术语矩阵,并将其分为培训集和测试集。我有一个“train”,它是一个训练观察的数据框架,不包括预测变量。然后我有“sentitrain”,它是与训练集相对应的情感值向量。测试也一样。 然后,我使用了三种不同的方法来拟合支持向量机模型。 首先,我创建了一个容器

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))