Python28-2 机器学习算法之SVM(支持向量机)

SVM(支持向量机)

支持向量机(Support Vector Machine,SVM)是一种用于分类和回归分析的监督学习模型,在机器学习领域中被广泛应用。SVM的目标是找到一个最佳的分割超平面,将不同类别的数据分开,使得两个类别之间的间隔(即边界)最大化。下面是对SVM的详细解释:

SVM的基本概念
  1. 超平面(Hyperplane)

    • 在二维空间中,超平面是将平面分为两部分的直线

    • 在三维空间中,超平面是将空间分为两部分的平面

    • 在更高维度的空间中,超平面是将该空间分为两部分的一个n-1维的子空间

  2. 支持向量(Support Vectors)

    • 支持向量是离分割超平面最近的那些数据点

    • 这些点是最重要的,因为它们定义了超平面的位置和方向

    • 移动这些点将会改变超平面的位置

  3. 间隔(Margin)

    • 间隔是指支持向量与超平面之间的距离

    • SVM的目标是最大化这个间隔,以提高分类器的鲁棒性和泛化能力

SVM的核函数(Kernel Function)

SVM可以通过使用核函数将输入数据映射到高维空间,在高维空间中,原本非线性可分的数据可以变成线性可分的。常见的核函数包括:

  1. 线性核(Linear Kernel):适用于线性可分的数据。

  2. 多项式核(Polynomial Kernel):用于非线性数据。

  3. 径向基函数核(RBF Kernel):也称高斯核,常用于非线性数据。

  4. Sigmoid核(Sigmoid Kernel):模拟神经网络的激活函数。

SVM算法工作原理
  1. 训练阶段

    • 给定训练数据集,SVM通过求解一个优化问题,找到最大化间隔的分割超平面。

    • 该优化问题通常是一个凸二次规划问题,可以通过各种优化算法求解。

  2. 分类阶段

    • 对于新的数据点,SVM根据其与分割超平面的相对位置进行分类。

    • 数据点落在超平面一侧的属于一个类别,落在另一侧的属于另一个类别。

SVM的数学描述

假设我们有一个训练数据集 ( (x_1, y_1), (x_2, y_2), ···, (x_n, y_n) ),其中 ( x_i ) 是特征向量,( y_i ) 是对应的类别标签,取值为 ( {+1, -1} )。

SVM的优化目标是:

其中,( w ) 是超平面的法向量,( b ) 是偏置项。

SVM的优缺点

优点

  • 能够有效处理高维空间的数据。

  • 在样本数量远大于特征数量的情况下仍然有效。

  • 具有较好的泛化能力,能够防止过拟合。

缺点

  • 对于大规模数据集,训练时间较长。

  • 对于含有噪声的数据表现较差,尤其是在类别重叠的情况下。

  • SVM的参数选择和核函数的选择需要经验和实验。

示例代码1

使用Python的scikit-learn库实现SVM分类器进行二维点的分类。

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score
import matplotlib.pyplot as plt

# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data[:, :2]  # 仅使用前两个特征进行可视化
y = iris.target

# 将数据集分为训练集和测试集
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='linear', C=1.0)
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 计算准确率和分类报告
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
print(classification_report(y_test, y_pred))

# 可视化决策边界
def plot_decision_boundary(clf, X, y):
    h = .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.8)
    plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
    plt.xlabel('Sepal length')
    plt.ylabel('Sepal width')
    plt.title('SVM Decision Boundary')
    plt.show()

plot_decision_boundary(clf, X_test, y_test)

结果可视化:

图片

上图中有部分点被错误的分类了,分类错误可能由以下原因引起:数据中存在噪声和异常值、数据本身在当前维度下不可分、训练数据量不足或特征选择不当、模型参数设置不合理、类别不平衡问题、以及模型过拟合或欠拟合。这些因素都会影响模型的准确性和泛化能力,导致在某些数据点上出现分类错误。

示例代码2

使用SVM进行三维数据分割。

import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 在Jupyter Notebook中启用交互模式
%matplotlib notebook

# 生成合成数据集
np.random.seed(42)
X, y = datasets.make_classification(
    n_samples=100, n_features=3, n_informative=3, 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)

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

# 创建和训练SVM分类器
clf = SVC(kernel='linear', C=1.0)
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

# 可视化决策边界
def plot_decision_boundary_3d(clf, X, y):
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    # 设置网格范围
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    z_min, z_max = X[:, 2].min() - 1, X[:, 2].max() + 1
    xx, yy = np.meshgrid(
        np.arange(x_min, x_max, 0.1),
        np.arange(y_min, y_max, 0.1)
    )

    # 计算平面上的决策函数值
    zz = (-clf.intercept_[0] - clf.coef_[0][0] * xx - clf.coef_[0][1] * yy) / clf.coef_[0][2]

    # 绘制决策平面
    ax.plot_surface(xx, yy, zz, alpha=0.3, color='r', edgecolor='none')

    # 绘制数据点
    scatter = ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.viridis, edgecolors='k')
    legend1 = ax.legend(*scatter.legend_elements(), title="Classes")
    ax.add_artist(legend1)

    ax.set_xlabel('Feature 1')
    ax.set_ylabel('Feature 2')
    ax.set_zlabel('Feature 3')
    ax.set_title('SVM Decision Boundary in 3D')

    # 允许图形旋转
    ax.view_init(elev=30, azim=30)
    plt.show()

plot_decision_boundary_3d(clf, X_test, y_test)

结果可视化:

图片

从上面的结果可以看出SVM正确分割了两类空间中的点。以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/755307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言,熟悉重装系统的方法可以帮助他们解决各种问题,从提高系统速度到修复软件故障。然而具体来讲,笔记本重装系统怎么操作呢?接下来&…

基于SpringBoot和PostGIS的某国基地可视化实战

目录 前言 一、Java后台开发设计与实现 1、模型层实现 2、控制层设计 二、WebGIS界面实现 1、列表界面的定义 2、全球基地可视化 三、成果展示 1、全球部署情况 2、亚太地区 3、欧洲基地分布 4、中东的部署 四、总结 前言 在之前的博客中,我们曾经对漂亮…

我在高职教STM32——GPIO入门之按键输入(2)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…

影响LED显示屏质量的关键因素

LED电子显示屏以其环保节能的特点,成为现代显示技术的重要选择。然而,确保显示屏的质量和安全使用,需要考虑多个方面。本文将探讨影响LED电子显示屏质量的关键因素,以及在不同环境下如何预防失火现象。 材质因素 显示屏的质量首先…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog,点击关注哦💕 前言 排序是一种基本的数据处理操作,它涉及将一系列项目重新排列,以便按照指定的标准(通常是数值大小)进行排序。在C语言中,排序算法是用来对元素进行排序的一系…

C语言从入门到进阶(15万字总结)

前言: 《C语言从入门到进阶》这本书可是作者呕心沥血之作,建议零售价1元,当然这里开个玩笑。 本篇博客可是作者之前写的所有C语言笔记博客的集结,本篇博客不止有知识点,还有一部分代码练习。 有人可能会问&#xff…

“ONLYOFFICE 8.1:提升用户体验和编辑功能的全面升级”

引言 官网链接 在当今快节奏的工作环境中,高效地处理文档是每个职场人士必备的技能。ONLYOFFICE 桌面编辑器凭借其强大的功能和用户友好的界面,成为了提升文档处理效率的得力助手。本文将介绍 ONLYOFFICE 桌面编辑器的核心特性,并展示如何通…

PAI3D: Painting Adaptive Instance-Prior for 3D Object Detection论文讲解

PAI3D: Painting Adaptive Instance-Prior for 3D Object Detection论文讲解 1. 引言2. PAI3D框架2.1 Instance Painter2.2 Adaptive Projection Refiner2.3 Fine-granular Detection Head 3. 实验结果3.1 消融实验 1. 引言 3D目标检测对于自动驾驶来说是一个非常重要的模块&a…

鸿蒙系统——强大的分布式系统

鸿蒙相比较于传统安卓最最最主要的优势是微内核分布式操作系统,具有面向未来,跨设备无缝协作,数据共享的全场景体验。下面简单来感受一下鸿蒙系统的多端自由流转。 自由流转概述 场景介绍 随着全场景多设备的生活方式不断深入,…

background 与 background-image

相同点:background 与 background-image都可以用于设置背景图 区别. background既可以用于设置背景图, 又可以用于设置CSS样式,还可以用于设置背景属性。 background-image只能用于设置背景图 background能设置的背景属性,如下&…

学习过程中遇到的 部分问题及解决办法

1.安装build wheel时报错: The detected CUDA version (12.1) mismatches the version that was used to compile PyTorch (11.7). Please make sure to use the same CUDA versions. 由于cuda版本和 当前虚拟环境中的pytorch-cudatoolkit版本不同, 解…

数据结构历年考研真题对应知识点(数组和特殊矩阵)

目录 3.4数组和特殊矩阵 3.4.2数组的存储结构 【二维数组按行优先存储的下标对应关系(2021)】 3.4.3特殊矩阵的压缩存储 【对称矩阵压缩存储的下标对应关系(2018、2020)】 【上三角矩阵采用行优先存储的应用(2011)】 【三对角矩阵压缩存储的下标对应关系(2016)】 3.4.…

【AIGC】《AI-Generated Content (AIGC): A Survey》

文章目录 相关概念What is AI-generated content?Necessary conditions of AIGCHow can AI make the content better?The industrial chain of AIGCAdvantages of large-scale pre-trained modelsGeneration of smart textPros of AIGCCons of AIGCAIGC and Metaverse 挑战潜…

【Vue】Vue.js中常见的几种语法

在 Vue.js 中,主要的语法可以分为以下几种: 插值语法 (Interpolation) 使用双大括号 {{ }} 进行文本插值。 示例: {{ message }} 指令语法 (Directives) 指令是特殊的标记,用于告诉Vue框架如何操作DOM。Vue提供了多种内置指…

算法基础-----【动态规划】

动态规划(待完善) 动规五部曲分别为: 确定dp数组(dp table)以及下标的含义确定递推公式(状态转移公式)dp数组如何初始化确定遍历顺序举例推导dp数组、 动态规划的核心就是递归剪枝(存储键值,…

有人物联的串口服务器USR-TCP232-410S基本测试通信和使用方案(485串口和232串口)

1.将 410S(USR-TCP232-410S,简称 410S 下同)的串口通过串口线(或USB 转串口线)与计算机相连接,通过网线将 410S 的网口 PC 的网口相连接,检测硬件连接无错误后,接入我们配送的电源适配器,给 410S 供电。观察指示灯状态…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target,找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案,且同样的元素不能被重复利用。比如:给定 nums [2, 7, 11, 15] 和 target 9,返回 [0, 1],因…

《数据仓库与数据挖掘》 总复习

试卷组成 第一章图 第二章图 第三章图 第四章图 第五章图 第六章图 第九章图 第一章 DW与DM概述 (特点、特性) DB到DW 主要特征 (1)数据太多,信息贫乏(Data Rich, Information Poor)。 &a…

计算机网络 —— 路由协议:RIP、OSPF、BGP、MPLS

路由协议 1. 定义2. IGP2.1 RIP2.2 OSPF 3. BGP4. MPLS 1. 定义 互联网中需要通过路由将数据发送至目标主机。 路由器根据**路由控制表(RoutingTable)**转发数据包,它根据所收到的数据包中目标主机的IP地址与路由控制表的比较得出下一个应该接收的路由器。 &…

HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑

使用 使用还是比较简单的,直接贴代码了 别忘了配置网络权限 Entry Component struct WebPage {State isAttachController: boolean falseState url: string State title: string Prop controller: web_webview.WebviewController new web_webview.WebviewCont…