支持向量机(Support Vector Machine, SVM)是一种广泛应用于分类和回归问题的监督学习算法。其核心思想是在特征空间中寻找一个最优超平面,使得两类样本能够最大化地分隔开。本文将深入探讨SVM的基本原理,并聚焦于从线性分类到非线性分类的过渡过程中,核函数的选择策略。
SVM通过求解一个凸二次规划问题来找到最优超平面。对于线性可分的情况,SVM的目标是找到一个超平面,使得两类样本分别位于该平面的两侧,并且两类样本中距离超平面最近的点(即支持向量)到超平面的距离最大化。这个距离被称为间隔(margin)。
SVM的优化问题可以表示为:
最小化:1/2 * ||w||^2
约束条件:yi * (w * xi + b) >= 1, 对于所有i
其中,w
是权重向量,b
是偏置项,xi
是输入特征,yi
是标签。
对于线性不可分的情况,SVM通过引入核函数(Kernel Function)将输入特征映射到一个高维特征空间,使得在高维空间中样本变得线性可分。常见的核函数包括线性核、多项式核、径向基函数(RBF)核和Sigmoid核等。
选择合适的核函数是SVM应用中的关键步骤之一。以下是一些常见的核函数及其适用场景:
γ
(gamma)可以控制映射到高维空间的复杂度。以下是一个使用Python和scikit-learn库实现SVM分类的示例,展示了线性核和RBF核的效果。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载示例数据集
X, y = datasets.make_moons(n_samples=100, noise=0.2, random_state=42)
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 线性核SVM
svc_linear = SVC(kernel='linear')
svc_linear.fit(X_train, y_train)
y_pred_linear = svc_linear.predict(X_test)
print(f'Linear Kernel Accuracy: {accuracy_score(y_test, y_pred_linear)}')
# RBF核SVM
svc_rbf = SVC(kernel='rbf', gamma=0.1)
svc_rbf.fit(X_train, y_train)
y_pred_rbf = svc_rbf.predict(X_test)
print(f'RBF Kernel Accuracy: {accuracy_score(y_test, y_pred_rbf)}')
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# 绘制决策边界
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z_linear = svc_linear.decision_function(xy).reshape(XX.shape)
Z_rbf = svc_rbf.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z_linear, levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'], colors='k')
ax.contour(XX, YY, Z_rbf, levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'], colors='r')
plt.show()
支持向量机是一种强大的分类算法,通过引入核函数能够处理非线性问题。选择合适的核函数和相应的参数对于提高分类性能至关重要。在实际应用中,可以通过交叉验证等方法来评估不同核函数和参数的效果,以找到最优的模型。