从线性到非线性:掌握支持向量机的艺术
支持向量机介绍
支持向量机(Support Vector Machine,简称SVM)是一种强大的监督学习算法,在数据分类和回归分析等领域广泛应用,与上一篇博客 感知机入门:从理论到实践的完整指南不同,支持向量机不仅可以线性可分的数据集进行分类,也可以使用核函数对非线性可分的数据集进行分类。
支持向量机基本思想
支持向量机是一种二分类模型,其基本思想是找到一个超平面,能够将不同类别的数据点正确地分开,并使得超平面到最近的数据点(支持向量)的距离最大化。在实际应用中,往往不是所有数据都线性可分,因此支持向量机引入了核函数来处理非线性分类问题。我认为支持向量机最重要的三个概念就是支持向量,最大间隔和核函数,其余部分与感知机类似,接下来我们将对这三个概念进行介绍。
支持向量
支持向量是离分隔超平面最近的那些数据点。正是这些点决定了最终的超平面的位置和方向。支持向量是构建SVM核心概念。
最大间隔
间隔是从支持向量到超平面的最短距离。SVM的目标是最大化这个间隔,以增强模型的泛化能力。直接使用文字进行介绍的话比较难以理解,因此我们通过一个具体的案例来观察什么是支持向量以及最大间隔。
硬间隔支持向量机python实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from matplotlib import rcParams
# 设置matplotlib的字体
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体
rcParams['axes.unicode_minus'] = False # 正确显示负号
# 生成线性可分的数据集
X, y = datasets.make_classification(n_features=2, n_redundant=0, n_informative=2,
random_state=1, n_clusters_per_class=1, n_samples=100)
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 训练一个SVM分类器
svm_model = SVC(kernel='linear', C=1)
svm_model.fit(X_scaled, y)
# 绘制数据点和超平面
plt.figure(figsize=(10, 6))
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap=plt.cm.Paired, marker='o', edgecolors='k'