用R语言实现支持向量机

时间:2023-02-16 08:55:57

支持向量机(Support Vector Machine, SVM)是一种二分类模型,它通过构造一个最优超平面对数据进行分类。超平面就是在高维空间中将不同类别的数据分离开的一个分界面,最优超平面则是离两个类别最近的数据点的距离最大的那个超平面。

以下是一个使用R语言中支持向量机进行分类的示例。

首先,我们需要加载必要的库。

library(e1071)
library(ggplot2)

将R自带的鸢尾花数据集分成训练集和测试集:

该数据集包括150个样本和4个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度),并且每个样本都有一个标签,表示其属于哪一类鸢尾花。

# 生成模拟数据集
set.seed(123)
n <- 100
X1 <- cbind(rnorm(n, mean = 0), rnorm(n, mean = 0))
X2 <- rbind(X1, cbind(rnorm(n, mean = 2), rnorm(n, mean = 2)))
y <- c(rep(1, n), rep(2, n))
data <- data.frame(x = X1, y = as.factor(y))

接下来,使用svm函数对数据进行建模:

model <- svm(Species ~ ., data = train)

这里的Species是鸢尾花的类别,.表示使用除了Species以外的所有变量作为特征。

最后,使用predict函数对测试集进行预测:

pred <- predict(model, test)

完整的代码如下:

library(e1071)
data(iris)

set.seed(123)
trainIndex <- sample(1:nrow(iris), 100)
train <- iris[trainIndex, ]
test <- iris[-trainIndex, ]

model <- svm(Species ~ ., data = train)

pred <- predict(model, test)
table(pred, test$Species)

运行代码后,可以得到测试集上的分类结果和混淆矩阵。根据混淆矩阵可以计算出准确率、召回率、F1值等指标,评估模型的性能。

运行结果:

pred setosa versicolor virginica

setosa 16 0 0

versicolor 0 20 0

virginica 0 1 13

以上是简单的支持向量机示例。SVM是一个非常有用的分类算法,广泛用于机器学习和数据科学领域。