支持向量机(Support Vector Machine,SVM)是一种常用的监督学习算法,主要用于分类和回归问题。它的原理简单而强大,在许多实际应用中取得了很好的效果。
支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,用于分类和回归问题。其原理是基于统计学习理论中的结构风险最小化原则。
SVM的主要思想是将数据通过一个高维特征空间进行映射,使得在该空间中不同类别的数据能够被一个超平面(线性分类)或多个超平面(非线性分类)分割开来。
具体而言,SVM通过寻找一个最优的超平面,使得离该超平面最近的训练样本点到该超平面的距离(即间隔)最大。这些距离最近的样本点被称为支持向量,它们决定了超平面的位置和方向。
支持向量机(Support Vector Machine,SVM)是一种二分类模型,它的目标是在特征空间中找到一个最优的超平面,能够将两类样本分开,并且使得边际最大化。
假设有一个样本集合 D = { x i , y i } D=\{\mathbf{x}_i,y_i\} D={xi,yi},其中 x i ∈ R n \mathbf{x}_i\in R^n xi∈Rn 表示样本的特征向量, y i ∈ { − 1 , 1 } y_i\in\{-1,1\} yi∈{−1,1} 表示样本的类别。SVM 的模型可以表示为:
min w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ξ i s . t . y i ( w T x i + b ) ≥ 1 − ξ i , i = 1 , 2 , ⋯ , m ξ i ≥ 0 , i = 1 , 2 , ⋯ , m \begin{aligned} \min_{\mathbf{w},b,\xi} \quad & \frac{1}{2}\|\mathbf{w}\|^2+C\sum_{i=1}^m \xi_i \\ s.t. \quad & y_i(\mathbf{w}^T\mathbf{x}_i+b)\geq 1-\xi_i,i=1,2,\cdots,m \\ & \xi_i\geq 0,i=1,2,\cdots,m \end{aligned} w,b,ξmins.t.21∥w∥2+Ci=1∑mξiyi(wTxi+b)≥1−ξi,i=1,2,⋯,mξi≥0,i=1,2,⋯,m
其中, w \mathbf{w} w 是超平面的法向量, b b b 是截距, ξ i \xi_i ξi 是松弛变量, C > 0 C>0 C>0 是惩罚参数,用于控制分类误差和边际的平衡。上述问题可以转化为对偶形式:
max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m y i y j α i α j x i T x j s . t . ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , ⋯ , m \begin{aligned} \max_{\alpha} \quad & \sum_{i=1}^{m}\alpha_i - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}y_iy_j\alpha_i\alpha_j\mathbf{x}_i^T\mathbf{x}_j \\ s.t. \quad & \sum_{i=1}^{m} \alpha_iy_i = 0 \\ & 0\leq \alpha_i\leq C,i=1,2,\cdots,m \end{aligned} αmaxs.t.i=1∑mαi−21i=1∑mj=1∑myiyjαiαjxiTxji=1∑mαiyi=00≤αi≤C,i=1,2,⋯,m
其中, α i \alpha_i αi 是拉格朗日乘子。对于新的样本 x \mathbf{x} x,它的分类结果可以表示为:
f ( x ) = s i g n ( ∑ i = 1 m α i y i x i T x + b ) f(\mathbf{x})=\mathrm{sign}\left(\sum_{i=1}^{m}\alpha_iy_i\mathbf{x}_i^T\mathbf{x}+b\right) f(x)=sign(i=1∑mαiyixiTx+b)
超平面的方程可以表示为:
w = ∑ i = 1 m α i y i x i \mathbf{w}=\sum_{i=1}^{m}\alpha_iy_i\mathbf{x}_i w=i=1∑mαiyixi
b = y k − ∑ i = 1 m α i y i x i T x k b=y_k-\sum_{i=1}^{m}\alpha_iy_i\mathbf{x}_i^T\mathbf{x}_k b=yk−i=1∑mαiyixiTxk
其中, k k k 表示支持向量的下标。
SVM 的核函数可以将数据从原始空间映射到一个更高维的空间,从而实现非线性分类。常用的核函数有线性核、多项式核、高斯径向基核等。
# 导入必要的库
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.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.decomposition import PCA
# 载入乳腺癌数据集
cancer = datasets.load_breast_cancer()
X, y = cancer.data, cancer.target
# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# PCA 数据降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
# 创建模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
# 绘制分类结果
h = 0.02 # 网格步长
x_min, x_max = X_pca[:, 0].min() - 1, X_pca[:, 0].max() + 1
y_min, y_max = X_pca[:, 1].min() - 1, X_pca[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
# 将结果绘制成彩色图
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
# 将原始数据点绘制在图上
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap=plt.cm.coolwarm, edgecolors='k')
plt.title('Breast Cancer Binary Classification - SVM')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.savefig('Breast Cancer Binary Classification - SVM.png')
plt.show()
上述代码是一个使用支持向量机(SVM)对乳腺癌数据集进行分类的示例。首先,我们使用 datasets.load_breast_cancer 函数从 scikit-learn 库中载入乳腺癌数据集。然后,我们对数据进行标准化处理,以确保各个特征具有相同的尺度。接下来,我们使用主成分分析(PCA)对数据进行降维,将高维的数据投影到二维空间中。
在数据预处理完成后,我们将数据集分割为训练集和测试集,其中训练集占比80%。我们创建了一个基于线性核函数的支持向量机模型,并使用训练集对模型进行训练。训练完成后,我们利用训练好的模型对测试集进行预测,得到预测结果。
接下来,我们计算模型的准确率,用于评估分类模型的性能。最后,我们利用 Matplotlib 库绘制了分类结果的可视化图表(如下图所示)。
支持向量机(SVM)是一种常用的监督学习算法,可以用于分类和回归问题。它的原理是通过寻找一个最优的超平面,将不同类别的数据分割开来,并使得边际最大化。SVM可以处理线性和非线性分类问题,并借助核函数将数据映射到高维空间。该算法的实现通常包括数据预处理、模型训练、预测和性能评估等步骤。在本例中,我们使用SVM对乳腺癌数据集进行二分类,利用主成分分析进行数据降维。最后,我们绘制了分类结果的可视化图表。如果文章存在其他问题,请随时提出,欢迎批评指正!