引言
支持向量机(Support Vector Machine,SVM)是一种高效的监督学习算法,广泛应用于分类和回归问题。SVM的核心思想是找到最佳的超平面,使得不同类别的数据点在超平面的两侧分开。本文将带您从SVM的基本原理出发,逐步深入到实战应用,帮助您轻松掌握线性与非线性分类技巧。
SVM原理详解
1. 超平面与分类
在二维空间中,一条直线可以将数据分为两部分。这条直线称为超平面。对于高维空间,超平面是一个n-1维的超平面。SVM的目标是找到一个最佳的超平面,使得两类数据点在超平面的两侧分开,且距离尽可能远。
2. 支持向量
在最佳超平面上,距离超平面最近的点称为支持向量。这些点对超平面的位置和宽度起着决定性作用。SVM算法的核心是寻找这些支持向量。
3. 软 margin与硬 margin
硬 margin是指所有数据点都严格位于超平面的两侧。而软 margin则允许一部分数据点位于超平面的两侧,以增加模型的泛化能力。SVM通过引入松弛变量来处理软 margin问题。
4. 模型优化
SVM模型优化问题可以转化为一个二次规划问题。通过求解这个二次规划问题,可以得到SVM模型的参数。
线性SVM
线性SVM适用于线性可分的数据集。其核心思想是找到一个最佳的超平面,使得两类数据点在超平面的两侧分开。
1. 特征映射
对于非线性可分的数据集,可以通过特征映射将其转换为线性可分的数据集。常用的特征映射方法包括多项式映射和径向基函数(RBF)映射。
2. 线性SVM代码示例
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 创建数据集
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建线性SVM模型
model = SVC(kernel='linear')
# 训练模型
model.fit(X_train, y_train)
# 评估模型
score = model.score(X_test, y_test)
print(f"线性SVM准确率:{score:.2f}")
非线性SVM
非线性SVM适用于非线性可分的数据集。其核心思想是找到一个最佳的超平面,使得两类数据点在超平面的两侧分开。
1. RBF核函数
RBF核函数是一种常用的非线性核函数,可以将数据映射到高维空间,从而实现非线性分类。
2. 非线性SVM代码示例
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 创建数据集
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建非线性SVM模型
model = SVC(kernel='rbf')
# 训练模型
model.fit(X_train, y_train)
# 评估模型
score = model.score(X_test, y_test)
print(f"非线性SVM准确率:{score:.2f}")
总结
SVM是一种强大的分类算法,适用于线性与非线性分类问题。通过本文的介绍,相信您已经对SVM有了深入的了解。在实际应用中,选择合适的核函数和参数对模型的性能至关重要。希望本文能帮助您轻松掌握SVM模型训练技巧。