在R中使用支持向量机(SVM)对数据进行分类

在机器学习中,支持向量机(SVM)是有监督的学习模型,具有相关的学习算法,用于分析用于分类和回归分析的数据。它主要用于分类问题。在该算法中,每个数据项被绘制为n维空间中的一个点(其中n是多个特征),每个特征的值是特定坐标的值。然后,通过找到最能区分这两类的超平面来进行分类。 除了执行线性分类,支持向量机还可以有效地执行非线性分类,将其输入隐式映射到高维特征空间。

null

支持向量机的工作原理

支持向量机(SVM)是一种由分离超平面正式定义的判别分类器。换句话说,在给定标记训练数据(监督学习)的情况下,该算法输出一个对新示例进行分类的最优超平面。 在使用支持向量机时,最重要的问题是如何确定正确的超平面。考虑以下情景:

  • 情景1: 在这种情况下,有三个超平面称为A、B、C。现在的问题是确定最能区分恒星和圆的正确超平面。

图片[1]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 在找到正确的超平面之前,我们要知道的一条经验法则是,应该选择能更好地分隔两个类的超平面来对恒星和圆进行分类。 在这种情况下,B更好地对恒星和圆进行分类,因此它是一个右超平面。
  • 情景2: 现在再看另一个场景,三架飞机都很好地隔离了等级。现在的问题是,在这种情况下,如何识别正确的飞机。

图片[2]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 在这种情况下,计算最近的数据点和超平面之间的距离。具有最大距离的平面将被视为正确的超平面,以便更好地分类。 这里C有最大的边界,因此它将被视为一个右超平面。

以上是一些识别正确超平面的场景。 注: 有关在Python中使用SVM进行分类的详细信息,请参阅 在Python中使用支持向量机(SVM)对数据进行分类

SVM在R中的实现

这里,以导入 来自社交文件的社交网络辅助数据集。csv 以下步骤对实现进行了说明:

  • 导入数据集

R

# Importing the dataset
dataset = read.csv ( 'Social_Network_Ads.csv' )
dataset = dataset[3:5]


  • 输出:

图片[3]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 选择第3-5列 这样做是为了便于计算和实现(保持示例简单)。

R

# Taking columns 3-5
dataset = dataset[3:5]


  • 输出:

图片[4]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 对目标特征进行编码

R

# Encoding the target feature as factor
dataset$Purchased = factor (dataset$Purchased, levels = c (0, 1))


  • 输出:

图片[5]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 拆分数据集

R

# Splitting the dataset into the Training set and Test set
install.packages ( 'caTools' )
library (caTools)
set.seed (123)
split = sample.split (dataset$Purchased, SplitRatio = 0.75)
training_set = subset (dataset, split == TRUE )
test_set = subset (dataset, split == FALSE )


  • 输出:
    • 拆分器

图片[6]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 训练数据集

图片[7]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 测试数据集

图片[8]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 特征缩放

R

# Feature Scaling
training_set[-3] = scale (training_set[-3])
test_set[-3] = scale (test_set[-3])


  • 输出:
    • 特征尺度训练数据集

图片[9]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 特征缩放测试数据集

图片[10]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 将支持向量机拟合到训练集

R

# Fitting SVM to the Training set
install.packages ( 'e1071' )
library (e1071)
classifier = svm (formula = Purchased ~ .,
data = training_set,
type = 'C-classification' ,
kernel = 'linear' )


  • 输出:
    • 详细分类

图片[11]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 简言之,分类器

图片[12]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 预测测试集结果

R

# Predicting the Test set results
y_pred = predict (classifier, newdata = test_set[-3])


  • 输出:

图片[13]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 制造混乱矩阵

R

# Making the Confusion Matrix
cm = table (test_set[, 3], y_pred)


  • 输出:

图片[14]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 可视化训练集结果

R

# installing library ElemStatLearn
library (ElemStatLearn)
# Plotting the training data set results
set = training_set
X1 = seq ( min (set[, 1]) - 1, max (set[, 1]) + 1, by = 0.01)
X2 = seq ( min (set[, 2]) - 1, max (set[, 2]) + 1, by = 0.01)
grid_set = expand.grid (X1, X2)
colnames (grid_set) = c ( 'Age' , 'EstimatedSalary' )
y_grid = predict (classifier, newdata = grid_set)
plot (set[, -3],
main = 'SVM (Training set)' ,
xlab = 'Age' , ylab = 'Estimated Salary' ,
xlim = range (X1), ylim = range (X2))
contour (X1, X2, matrix ( as.numeric (y_grid), length (X1), length (X2)), add = TRUE )
points (grid_set, pch = '.' , col = ifelse (y_grid == 1, 'coral1' , 'aquamarine' ))
points (set, pch = 21, bg = ifelse (set[, 3] == 1, 'green4' , 'red3' ))


  • 输出:

图片[15]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

  • 可视化测试集结果

R

set = test_set
X1 = seq ( min (set[, 1]) - 1, max (set[, 1]) + 1, by = 0.01)
X2 = seq ( min (set[, 2]) - 1, max (set[, 2]) + 1, by = 0.01)
grid_set = expand.grid (X1, X2)
colnames (grid_set) = c ( 'Age' , 'EstimatedSalary' )
y_grid = predict (classifier, newdata = grid_set)
plot (set[, -3], main = 'SVM (Test set)' ,
xlab = 'Age' , ylab = 'Estimated Salary' ,
xlim = range (X1), ylim = range (X2))
contour (X1, X2, matrix ( as.numeric (y_grid), length (X1), length (X2)), add = TRUE )
points (grid_set, pch = '.' , col = ifelse (y_grid == 1, 'coral1' , 'aquamarine' ))
points (set, pch = 21, bg = ifelse (set[, 3] == 1, 'green4' , 'red3' ))


  • 输出:

图片[16]-在R中使用支持向量机(SVM)对数据进行分类-yiteyi-C++库

因为在结果中,在训练集结果中发现了一个超平面,并在测试集结果中验证为最佳超平面。因此,支持向量机在R。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享