【AI知识】有监督学习分类任务之支持向量机

1.支持向量机概念

支持向量机(Support Vector Machine, SVM) 是一种有监督学习算法,主要用于分类任务(也可用于回归任务,即支持向量回归,SVR)。SVM的核心思想是找到一个最优的超平面(hyperplane) 来将不同类别的数据分开,且最大化类别间边界(间隔),从而提高模型的泛化能力。

如,在二分类问题中,SVM的目标是找到一个最优的超平面(即决策边界),该平面能够将数据集中的正负类样本分开,下面都以二分类问题为例说明:

支持向量机的几个概念:

  • 超平面(Hyperplane) : 超平面将数据空间分割成两个部分。在二维空间中,超平面是一条直线;在三维空间中,超平面是一个平面;在高维空间中,超平面是一个维度比数据空间少1的超平面。对于一个二维空间中的分类问题,SVM的任务就是找到一个直线(超平面),将正负类样本分开。

  • 最大化间隔: SVM的关键思想是最大化分隔正负类的间隔 。间隔是指从数据点到超平面的垂直距离。在SVM中,支持向量是距离决策边界最近的那些点,这些点决定了超平面的最优位置。假设我们的数据点有两个类别,+1 和 -1 类,我们希望找到一个超平面,使得这个平面把两类数据完全分开,并且两类数据到超平面的距离最大。

细节我有点看不懂了。。。。

SVM实例+可视化:

bash 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 创建线性可分数据集
def generate_linear_data():
    # 使用sklearn生成一个线性可分的数据集
    X, y = datasets.make_classification(n_samples=200, n_features=2, n_informative=2,
                                         n_redundant=0, n_clusters_per_class=1, class_sep=2)
    return X, y

# 创建非线性可分数据集
def generate_nonlinear_data():
    # 使用sklearn生成一个非线性可分的数据集
    # 它生成的是一个包含两个类别的数据集,其中样本数据分布在两个同心圆形状的区域内
    X, y = datasets.make_circles(n_samples=200, noise=0.1, factor=0.5)
    return X, y

# 绘制SVM的决策边界
def plot_decision_boundary(X, y, clf):
    h = 0.02  # 网格间距
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contourf(xx, yy, Z, alpha=0.3)
    plt.scatter(X[:, 0], X[:, 1], c=y, marker='o', edgecolors='k', s=50)
    plt.title("SVM Decision Boundary")
    plt.show()

# 训练并可视化SVM模型
def train_and_visualize(X, y, kernel_type='linear'):
    # 切分数据集为训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

    # 数据标准化
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)

    # 初始化SVM分类器
    clf = SVC(kernel=kernel_type)
    
    # 训练SVM
    clf.fit(X_train, y_train)

    # 打印支持向量信息
    print(f"Number of support vectors: {len(clf.support_)}")

    # 可视化决策边界
    plot_decision_boundary(X_train, y_train, clf)

# 主函数
def main():
    # 1. 线性可分数据
    print("Training with linearly separable data...")
    X_linear, y_linear = generate_linear_data()
    train_and_visualize(X_linear, y_linear, kernel_type='linear')

    # 2. 非线性可分数据
    print("Training with non-linearly separable data...")
    X_nonlinear, y_nonlinear = generate_nonlinear_data()
    train_and_visualize(X_nonlinear, y_nonlinear, kernel_type='rbf')

if __name__ == "__main__":
    main()


相关推荐
Raink老师3 小时前
【AI面试临阵磨枪】详细解释 Transformer 架构的核心组件与工作流程。
人工智能·深度学习·transformer·ai 面试·ai 应用开发
qcx233 小时前
【AI Agent实战】OpenClaw 安全加固完全指南:安全攻击手段与五步防护实践(2026最新)
人工智能·安全
码农小白AI3 小时前
AI报告审核进入技术驱动时代:IACheck如何从规则引擎走向深度学习,构建检测报告审核“技术矩阵”
人工智能·深度学习
song150265372983 小时前
视觉检测设备:自动识别缺陷、尺寸、瑕疵、装配错误,一键全检
人工智能·计算机视觉·视觉检测
智能化咨询3 小时前
(163页PPT)某著名企业K3生产制造售前营销指导方案P164(附下载方式)
大数据·人工智能
Zzj_tju4 小时前
大语言模型技术指南:SFT、RLHF、DPO 怎么串起来?对齐训练与关键参数详解
人工智能·深度学习·语言模型
金智维科技官方4 小时前
RPA技术赋能电信运营商话单稽核:金智维如何驱动高精度自动化转型
人工智能·自动化·数字化·rpa·智能体·电信
2501_948114244 小时前
2026模型能力分化加剧:多模型聚合架构的技术解析与工程落地思考
人工智能·ai·chatgpt·架构
新知图书5 小时前
LangGraph中的记忆存储
人工智能·langgraph·智能体设计·多智能体设计
冬奇Lab5 小时前
Claude Code 实战经验分享(上篇):从启动到并发协同
人工智能·ai编程·claude