本文使用 R 语言中的支持向量机 (SVM) 算法对 Iris 数据集进行分类,并可视化分类结果,旨在通过实际操作加深对 SVM 算法的理解。

Iris 数据集是常用的分类实验数据集,包含 150 个数据样本,分为 3 类(Setosa、Versicolour、Virginica),每类 50 个数据。每个数据包含 4 个属性:花萼长度、花萼宽度、花瓣长度和花瓣宽度。本实验的目标是利用这些属性来预测鸢尾花卉的种类。

实验步骤

  1. 加载 R 包和数据集
install.packages('e1071')
library(e1071)
data(iris)
  1. 数据预处理
summary(iris)  # 查看数据集概括信息
x = iris[, -5]  # 提取特征向量
y = iris[, 5]  # 提取结果变量
  1. 构建 SVM 模型
model = svm(x, y, kernel = 'radial', gamma = if (is.vector(x)) 1 else 1 / ncol(x))
  1. 预测和评估
pred = predict(model, x)  # 进行预测
# 展示预测结果
print(pred[sample(1:150, 8)])
# 评估模型精度
print(table(pred, y))
  1. 深入分析:探索不同分类方式和核函数
attach(iris)
x = subset(iris, select = -Species)  # 提取特征变量
y = Species  # 提取结果变量
type = c('C-classification', 'nu-classification', 'one-classification')  # 分类方式
kernel = c('linear', 'polynomial', 'radial', 'sigmoid')  # 核函数
pred = array(0, dim = c(150, 3, 4))  # 初始化预测结果矩阵
accuracy = matrix(0, 3, 4)  # 初始化模型精度矩阵
yy = as.integer(y)  # 将结果变量数量化为 1, 2, 3

# 循环遍历分类方式和核函数,构建模型并预测
for (i in 1:3) {
  for (j in 1:4) {
    pred[, i, j] = predict(svm(x, y, type = type[i], kernel = kernel[j]), x)
    # 计算模型精度
    if (i > 2) {
      accuracy[i, j] = sum(pred[, i, j] != 1)
    } else {
      accuracy[i, j] = sum(pred[, i, j] != yy)
    }
  }
}

dimnames(accuracy) = list(type, kernel)  # 设置矩阵行名和列名
print(table(pred[, 1, 3], y))  # 打印预测结果
  1. 可视化分类结果
plot(cmdscale(dist(iris[, -5])), col = c('red', 'black', 'gray')[as.integer(iris[, 5])], pch = c('o', '+')[1:150 %in% model$index + 1])  # 绘制三点图
legend(2, 0.8, c('setosa', 'versicolor', 'virginica'), col = c('red', 'black', 'gray'), lty = 1)

实验结果与分析

实验结果表明,采用径向基核函数 (radial) 的 C-classification 分类方式能够取得较好的分类效果。

绘制的三点图展示了 SVM 模型对 Iris 数据集的分类结果。不同颜色和标记代表不同的鸢尾花种类。图中一些点重合在一起,表明这些样本可能位于分类边界上或被错误分类。

结论

本次实验通过实际操作,加深了对 SVM 算法的理解,并体验了 R 语言数据分析的便捷性。实验结果表明,SVM 算法能够有效地对 Iris 数据集进行分类,并且通过调整分类方式和核函数可以进一步提升模型性能。

未来展望

可以尝试使用不同的数据集对 SVM 算法进行测试,以评估其在不同场景下的性能。此外,还可以探索更复杂的 SVM 模型,例如使用多核 SVM 或引入特征选择方法,以进一步提升分类效果。

Iris 数据集分类:基于 R 语言 SVM 算法的实现与分析

原文地址: https://www.cveoy.top/t/topic/oX0L 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录