SVM从原理到实现

SVM 简介

SVM(Support Vector Machines)支持向量机是机器学习中的一种分类算法,属于监督式学习,也可以同时用于分类和回归问题。SVM的核心思想是找到最大的边际超平面,以最大程度地将数据集划分为类。

SVM原理

术语

  • Margin

    边距是最接近的分类点上的两条线之间的间隙。 这是从线到支持向量或最接近点的垂直距离来计算的。 如果两个类之间的边距较大,则认为是良好的边距,较小的边距是较差的边距

  • Soft Margin

    允许错误分类,这时观测值和阈值间的距离也称作Soft Margin。使用Cross Validation确定在 Soft Margin错误分类的个数,从而得到最好的分类模型。

  • 支持向量(Support Vectors)

    支持向量是最靠近超平面的数据点。 这些点将通过计算边距更好地定义分隔线。 这些点与分类器的构建更相关

    当处理的数据是一维时,Support Vector Classifier 是一个单独点;当处理的数据是二维时,Support Vector Classifier是一条线(如下图2-D);当处理的数据是三维时,Support Vector Classifier 是一个超平面(hyperplane)(如下图3-D)

    图2-D:

    图3-D:

SVM 背后的原理

首先以低维数据开始

然后将数据转为更高的维度

fig8

找到一个Support Vector Classifier可以将高维数据分为两类

SVM数学原理

利用核函数(Kernel Functions)找到Support Vector Classifier

  • Polynomial Kernel(多项核):包含参数d,表示多项式的维度,如d=1,表示1维,d=3,表示3维。
  • Radial Kernel:用于无限维度

SVM优缺点

优点:

  • High Dimensionality
  • Memory Efficiency
  • Versatility

缺点:

  • Kernel Parameters Selection
  • Non-Probabilistic

R和Python中实现SVM

R中实现SVM

R中可以借助package e1071

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Import Library
require(e1071) #Contains the SVM
Train <- read.csv(file.choose())
Test <- read.csv(file.choose())
# there are various options associated with SVM training; like changing kernel, gamma and C value.

# create model
model <- svm(Target~Predictor1+Predictor2+Predictor3,data=Train,kernel='linear',gamma=0.2,cost=100)

#Predict Output
preds <- predict(model,Test)
table(preds)

链接:https://www.zhihu.com/question/21094489/answer/392090279

具体参考:https://www.datacamp.com/community/tutorials/support-vector-machines-r

Python中实现SVM

Python中可以借助scikit-learn库,

1
2
3
4
5
6
7
8
9
10
11
12
#Import Library
from sklearn import svm
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object
model = svm.svc(kernel='linear', c=1, gamma=1)
# there is various option associated with it, like changing kernel, gamma and C value. Will discuss more # about it in next section.Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Predict Output
predicted= model.predict(x_test)

链接:https://www.zhihu.com/question/21094489/answer/392090279

参考资料