使用支持向量机训练垃圾邮件分类器

时间:2020-10-25 14:37:46

标签: r

在本练习中,您将使用支持向量机训练垃圾邮件分类器。我们将使用{kernlab}软件包随附的垃圾邮件数据集。首先,我们将垃圾邮件数据随机分为两半:一半将用作训练数据,另一半将用作测试数据。目标变量是type,它是二进制类垃圾邮件和nospam。

  1. 查看数据集的帮助页面,以找出不同列的含义(提示:

垃圾邮件)。

  1. 在训练数据上使用svm()设置支持向量分类器。类型是目标,所有其他变量都可以用作预测变量(提示:您可以使用。表示法,该符号自动包含data.frame的所有列作为目标变量除外的预测变量)。

  2. 为测试数据集中的数据预测垃圾邮件/非垃圾邮件类别。预测的分类与真实的分类相比如何?什么是分类错误?

  3. 您可以提高分类准确性吗? (提示:首先探索成本属性的不同设置并使用不同的预测变量。)

  4. 解释使用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,]

下一步我该怎么做?

1 个答案:

答案 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的内核,对增强模型的改进可以缩放所有数字变量。

相关问题