一、什么是支持向量机?
支持向量机(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的优缺点
优点:
- 在高维空间中,具有良好的泛化性能。
- 可以有效地处理高维特征空间中的大型数据集。
- 适用于小样本的情况。
- 对于非线性分类问题具有出色的表现。
缺点:
- 不适合大规模训练集,因为它需要大量的空间和计算时间。
- 对于非常嘈杂的数据集,可能会出现过度拟合的现象。
- 对于多分类问题,需要进行额外的处理。
原创文章,作者:LRZEZ,如若转载,请注明出处:https://www.506064.com/n/370068.html