在本练习中,您将使用支持向量机训练垃圾邮件分类器。我们将使用{kernlab}软件包随附的垃圾邮件数据集。首先,我们将垃圾邮件数据随机分为两半:一半将用作训练数据,另一半将用作测试数据。目标变量是type,它是二进制类垃圾邮件和nospam。
垃圾邮件)。
在训练数据上使用svm()设置支持向量分类器。类型是目标,所有其他变量都可以用作预测变量(提示:您可以使用。表示法,该符号自动包含data.frame的所有列作为目标变量除外的预测变量)。
为测试数据集中的数据预测垃圾邮件/非垃圾邮件类别。预测的分类与真实的分类相比如何?什么是分类错误?
您可以提高分类准确性吗? (提示:首先探索成本属性的不同设置并使用不同的预测变量。)
解释使用svm执行的分类有多容易?将svm模型的可解释性与回归模型的可解释性进行比较(例如,像上面练习中那样)。
我从以下代码开始:
# install.packages("kernlab")
library(e1071)
library(kernlab)
data(spam)
dim(spam)
head(spam)
set.seed(02115)
sample <- sample( c(TRUE, FALSE), nrow(spam), replace=TRUE)
train <- spam[sample,]
test <- spam[!sample,]
下一步我该怎么做?
答案 0 :(得分:0)
尝试这种方法。您可以使用svm()
和glm()
来测试算法并评估性能。这里是代码。
library(e1071)
library(kernlab)
data(spam)
set.seed(02115)
sample <- sample( c(TRUE, FALSE), nrow(spam), replace=TRUE)
train <- spam[sample,]
test <- spam[!sample,]
#Code for svm
fitsvm <- svm(type~.,type='C-classification',kernel='linear',data = train)
predssvm <- predict(fitsvm, test)
predictedclasssvm <- predssvm
trueclasssvm <- test$type
#Code for glm
fitglm <- glm(type~.,family = 'binomial',data=train)
predsglm <- predict(fitglm, test,type='link')
predictedclassglm <- predsglm
predictedclassglm <- ifelse(predictedclassglm>=0.5,'spam','nonspam')
trueclassglm <- as.character(test$type)
StatML模型在训练集中进行训练,必须在测试集中进行测试。对于glm()
,您必须定义一个截止点(通常定义为0.5)。这样您就可以计算模型的准确性:
#Accuracy svm
sum(predictedclasssvm == trueclasssvm)/length(predictedclasssvm)
输出:
[1] 0.9274989
对于GLM:
#Accuracy glm
sum(predictedclassglm == trueclassglm)/length(predictedclassglm)
输出:
[1] 0.9176319
SVM在任务垃圾邮件/非垃圾邮件中表现出更好的性能,但是GLM也很好。您可以尝试使用其他支持SVM的内核,对增强模型的改进可以缩放所有数字变量。