支持向量机原理详解

发布时间:2023-05-23

一、什么是支持向量机?

支持向量机(Support Vector Machine, SVM)首先由Vladimir Vapnik等人于上世纪90年代提出,是一种常见的机器学习算法。SVM是一种非概率性二元线性分类器,它的基本想法是将数据映射到高维空间中,使得该空间中不同类别之间的超平面最大化,从而达到良好的分类效果。 SVM的主要优点在于它可以处理高维度的数据,并且能够在处理较小数据集的时候取得非常好的效果。

二、SVM的原理

在SVM的训练过程中,它会将数据集映射到高维空间中,并构建一个超平面来将不同类别的数据进行分类。超平面是指一个n维空间中的n-1维子空间,它能够将数据点分为两类。例如,在二维平面中,超平面就是一条直线,可以将数据点分为正负两类。 但在实际应用中,数据点很可能不是线性可分的。因为SVM本身是一个线性分类器,所以需要对数据进行适当的处理,使得它们变成线性可分的。SVM的主要思想是利用核函数对输入数据进行非线性转换,将原始空间中不易分类的样本映射到一个新的高维空间,使得它们在该空间中线性可分。

三、SVM的核函数

SVM的核函数是将数据点映射到新空间的重要工具之一。当我们想要处理的数据集不是线性可分的时候,可以使用非线性核函数将数据映射到一个高维空间中,使它们在该空间中线性可分。 常用的核函数有以下几种: 线性核函数 线性核函数是一种最简单的核函数,它是在原数据空间中直接求内积,对应于高维特征空间中的一个线性核空间,数学表达式为:

K(x_i, x_j) = x_i * x_j

多项式核函数 多项式核函数通过引入多项式项将数据映射到高维空间中,表达式为:

K(x_i, x_j) = (x_i * x_j + c)^d

高斯核函数 高斯核函数也被称为径向基核函数,它是一种非常常用的核函数。 在高斯核函数的计算中,每个样本都被映射到无穷维的空间中,该核函数的表达式为:

K(x_i, x_j) = exp(- gamma * ||x_i - x_j||^2)

四、SVM的核函数代码示例

1.线性核函数代码示例

import numpy as np
from sklearn.svm import SVC
X_train = np.array([[1, 2], [2, 3], [3, 3], [2, 1], [3, 2], [4, 3]])
y_train = np.array([1, 1, 1, -1, -1, -1])
svm_linear = SVC(kernel='linear', C=10)
svm_linear.fit(X_train, y_train)
print('支持向量:', svm_linear.support_vectors_)
print('决策函数:', svm_linear.decision_function(X_train))
print('预测值:',svm_linear.predict(X_train))

2.多项式核函数代码示例

import numpy as np
from sklearn.svm import SVC
X_train = np.array([[1, 2], [2, 3], [3, 3], [2, 1], [3, 2], [4, 3]])
y_train = np.array([1, 1, 1, -1, -1, -1])
svm_poly = SVC(kernel='poly', degree=3, coef0=1)
svm_poly.fit(X_train, y_train)
print('支持向量:', svm_poly.support_vectors_)
print('决策函数:', svm_poly.decision_function(X_train))
print('预测值:',svm_poly.predict(X_train))

3.高斯核函数代码示例

import numpy as np
from sklearn.svm import SVC
X_train = np.array([[1, 2], [2, 3], [3, 3], [2, 1], [3, 2], [4, 3]])
y_train = np.array([1, 1, 1, -1, -1, -1])
svm_rbf = SVC(kernel='rbf', gamma=1)
svm_rbf.fit(X_train, y_train)
print('支持向量:', svm_rbf.support_vectors_)
print('决策函数:', svm_rbf.decision_function(X_train))
print('预测值:',svm_rbf.predict(X_train))

五、SVM的优缺点

优点:

  • 在高维空间中,具有良好的泛化性能。
  • 可以有效地处理高维特征空间中的大型数据集。
  • 适用于小样本的情况。
  • 对于非线性分类问题具有出色的表现。 缺点:
  • 不适合大规模训练集,因为它需要大量的空间和计算时间。
  • 对于非常嘈杂的数据集,可能会出现过度拟合的现象。
  • 对于多分类问题,需要进行额外的处理。