当前位置: 首页 > news >正文

SVM支持向量机python实现

支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,主要用于分类和回归任务。SVM的核心思想是找到一个最优的超平面,使得不同类别的数据点能够被尽可能清晰地分开,并且这个超平面与最近的数据点之间有最大的间隔。这些最近的数据点被称为“支持向量”,因为它们决定了超平面的位置和方向。

支持向量机的关键概念

1. **最大间隔分离器**:
   - SVM的目标是找到一个超平面,该超平面能够将不同类别的数据点以最大间隔分隔开。
   - 这个间隔被称为“边际”(margin),最大化边际可以提高模型的泛化能力。

2. **支持向量**:
   - 支持向量是那些位于边际边界上的训练样本。它们对超平面的位置和方向起决定性作用。
   - 一旦确定了支持向量,其他非支持向量的训练样本对模型没有影响。

3. **核技巧**:
   - 对于线性不可分的数据,SVM通过使用核函数(kernel function)将数据映射到高维空间,在那里可能更容易找到一个合适的分割面。
   - 常见的核函数包括线性核、多项式核、径向基函数(RBF)核和Sigmoid核。

4. **软间隔**:
   - 在实际应用中,数据往往不是完全线性可分的。SVM引入了软间隔(soft margin)的概念,允许一些数据点在边际内或错误分类。
   - 通过正则化参数 \( C \) 来控制误差项的惩罚程度,\( C \) 越大,对误分类的惩罚越重。

### 支持向量机的工作原理

1. **线性可分情况**:
   - 当数据线性可分时,SVM寻找一个超平面 \( w \cdot x + b = 0 \),使得两个类别的数据点分别位于超平面的两侧,并且距离超平面最近的数据点(支持向量)到超平面的距离最大。
   - 目标是最小化 \( \frac{1}{2} \|w\|^2 \),同时满足 \( y_i (w \cdot x_i + b) \geq 1 \) 的约束条件,其中 \( y_i \) 是类别标签(+1 或 -1)。

2. **线性不可分情况**:
   - 当数据线性不可分时,引入松弛变量 \( \xi_i \) 来允许某些数据点违反边际约束。
   - 目标是最小化 \( \frac{1}{2} \|w\|^2 + C \sum \xi_i \),同时满足 \( y_i (w \cdot x_i + b) \geq 1 - \xi_i \) 和 \( \xi_i \geq 0 \) 的约束条件。

3. **核技巧**:
   - 通过核函数 \( K(x, x') \) 将原始特征空间中的数据点映射到高维特征空间。
   - 在高维空间中,数据可能变得线性可分,从而可以使用线性SVM进行分类。
   - 常见的核函数包括:
     - 线性核:\( K(x, x') = x \cdot x' \)
     - 多项式核:\( K(x, x') = (x \cdot x' + c)^d \)
     - RBF核(高斯核):\( K(x, x') = \exp(-\gamma \|x - x'\|^2) \)
     - Sigmoid核:\( K(x, x') = \tanh(\alpha x \cdot x' + c) \)

### 优点
- **高效性**:在高维空间中表现良好,尤其是在特征数量大于样本数量的情况下。
- **鲁棒性**:由于只依赖于支持向量,对噪声和异常值具有一定的鲁棒性。
- **灵活性**:通过选择不同的核函数,可以处理各种类型的数据分布。

### 缺点
- **计算复杂度**:当训练样本数量非常大时,计算复杂度较高。
- **参数选择**:核函数的选择及其参数设置对性能影响较大,需要仔细调参。
- **解释性**:相比于一些简单的模型,SVM的解释性较差。

 代码实现

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matriximport matplotlib.pyplot as plt# 生成数据集
np.random.seed(42)
X = np.r_[np.random.randn(50, 2) - [2, 2],  # 类别0np.random.randn(50, 2) + [2, 2]   # 类别1
]
y = np.array([0] * 50 + [1] * 50)# 可视化数据
plt.scatter(X[y == 0, 0], X[y == 0, 1], label='Class 0', color='blue')
plt.scatter(X[y == 1, 0], X[y == 1, 1], label='Class 1', color='red')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Generated Data')
plt.legend()
plt.show()# 划分训练集和测试集
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分类器实例
svm_clf = SVC(kernel='linear', C=1.0, random_state=42)  # 线性核函数# 训练模型
svm_clf.fit(X_train, y_train)# 预测
y_pred = svm_clf.predict(X_test)# 评估模型
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
print("\nClassification Report:")
print(classification_report(y_test, y_pred))

刚刚的代码实现了线性分类

核函数:

支持向量机(SVM)中使用的核函数有很多种,每种核函数都有其特定的应用场景和特点。以下是一些常见的核函数:

1. **线性核 (Linear Kernel)**
   - **形式**:\( K(x, y) = x^T y \)
   - **用途**:适用于线性可分的数据集。
   - **特点**:简单且计算效率高。

2. **多项式核 (Polynomial Kernel)**
   - **形式**:\( K(x, y) = (x^T y + c)^d \),其中 \( c \) 是常数项,\( d \) 是多项式的次数。
   - **用途**:适用于需要捕捉特征之间交互效应的情况。
   - **特点**:可以通过调整 \( d \) 来控制模型的复杂度。

3. **径向基函数核 (RBF Kernel, 也称高斯核)**
   - **形式**:\( K(x, y) = \exp(-\gamma \|x - y\|^2) \),其中 \(\gamma > 0\) 是一个参数。
   - **用途**:适用于大多数情况,特别是当数据不是线性可分时。
   - **特点**:具有很强的灵活性,可以适应各种形状的数据分布,但可能会导致过拟合。

4. **Sigmoid核 (Sigmoid Kernel)**
   - **形式**:\( K(x, y) = \tanh(\alpha x^T y + c) \),其中 \(\alpha\) 和 \(c\) 是参数。
   - **用途**:模拟神经网络中的激活函数。
   - **特点**:较少使用,因为它可能导致非正定的核矩阵。

5. **拉普拉斯核 (Laplacian Kernel)**
   - **形式**:\( K(x, y) = \exp(-\gamma \|x - y\|) \),其中 \(\gamma > 0\) 是一个参数。
   - **用途**:类似于RBF核,但在某些情况下可能更适合处理稀疏数据。
   - **特点**:对异常值更鲁棒。

6. **Spline核 (Spline Kernel)**
   - **形式**:\( K(x, y) = \prod_{i=1}^n \max(0, 1 - |x_i - y_i| / \delta) \),其中 \(\delta\) 是一个参数。
   - **用途**:适用于平滑函数的建模。
   - **特点**:在某些情况下可以提供更好的平滑效果。

7. **ANOVA核 (ANOVA Kernel)**
   - **形式**:\( K(x, y) = \sum_{i=1}^d \exp(-\sigma (x_i - y_i)^2) + \kappa \sum_{i < j} \exp(-\sigma (x_i - y_i)^2 - \sigma (x_j - y_j)^2) \),其中 \(\sigma\) 和 \(\kappa\) 是参数。
   - **用途**:适用于多维数据,特别是在处理高维特征时。
   - **特点**:可以捕捉特征之间的相互作用。

8. **弦核 (Chordal Kernel)**
   - **形式**:\( K(x, y) = \sin^{-1}(x^T y / (\sqrt{x^T x} \sqrt{y^T y})) \)
   - **用途**:适用于处理球面或单位圆上的数据。
   - **特点**:适用于几何空间中的数据。

如何选择核函数

- **线性问题**:如果数据是线性可分的,通常选择线性核,因为它的计算效率最高。
- **非线性问题**:对于非线性可分的数据,RBF核是一个常用的选择,因为它对参数敏感度较低,且能够很好地处理多种类型的数据分布。
- **特定领域知识**:有时候基于领域知识,可以选择更适合问题特性的核函数,比如在某些图像处理任务中,多项式核可能更合适。

在`scikit-learn`中设置核函数yingyying

from sklearn.svm import SVC# 线性核
svm_linear = SVC(kernel='linear')# 多项式核
svm_poly = SVC(kernel='poly', degree=3, coef0=1)# RBF核
svm_rbf = SVC(kernel='rbf', gamma='scale')# Sigmoid核
svm_sigmoid = SVC(kernel='sigmoid', coef0=0.0)# 自定义核函数
def custom_kernel(x, y):return np.dot(x, y.T)  # 示例:自定义线性核svm_custom = SVC(kernel=custom_kernel)

应用:

支持向量机(SVM)是一种非常强大的机器学习算法,适用于多种实际问题。以下是一些常见的应用场景:

### 1. **文本分类**
- **垃圾邮件检测**:SVM可以用来区分垃圾邮件和正常邮件。
- **情感分析**:通过训练SVM模型来识别文本中的正面或负面情感。
- **文档分类**:将文档分类到不同的类别,如新闻文章、科研论文等。

### 2. **图像识别与计算机视觉**
- **手写字符识别**:SVM在手写数字识别任务中表现出色,例如MNIST数据集。
- **面部识别**:用于人脸识别系统中的特征提取和分类。
- **物体检测**:在图像中检测特定的物体,如行人、车辆等。

### 3. **生物信息学**
- **基因表达分析**:用于识别不同条件下的基因表达模式。
- **蛋白质结构预测**:预测蛋白质的二级结构。
- **疾病诊断**:根据基因表达数据或其他生物标志物进行疾病诊断。

### 4. **金融领域**
- **信用评分**:评估客户的信用风险。
- **股票市场预测**:基于历史数据预测股票价格走势。
- **欺诈检测**:检测信用卡交易中的欺诈行为。

### 5. **医疗健康**
- **医学影像分析**:辅助医生进行医学影像的诊断,如X光片、MRI等。
- **患者分类**:根据患者的特征将其分类为不同的风险组。
- **药物发现**:在药物筛选过程中识别潜在的有效化合物。

### 6. **自然语言处理**
- **命名实体识别**:从文本中识别出人名、地名、组织名等。
- **句子分类**:将句子分类为不同的类别,如陈述句、疑问句等。
- **语义角色标注**:识别句子中的语义角色,如主语、宾语等。

### 7. **推荐系统**
- **用户偏好预测**:根据用户的历史行为预测其可能感兴趣的内容。
- **物品分类**:将物品分类到不同的类别,以便更好地进行推荐。

### 8. **工业应用**
- **质量控制**:在制造过程中检测产品缺陷。
- **故障诊断**:根据传感器数据预测设备故障。
- **能源管理**:优化能源使用,预测能源需求。

### 9. **网络安全**
- **入侵检测**:检测网络中的异常行为,识别潜在的安全威胁。
- **恶意软件检测**:识别和分类恶意软件。

### 10. **社交媒体分析**
- **内容过滤**:自动过滤掉不当内容。
- **用户行为分析**:分析用户的行为模式,提供个性化服务。

### 11. **环境科学**
- **空气质量预测**:基于历史数据预测空气质量指数。
- **气候变化研究**:分析气候数据,预测未来的气候变化趋势。

### 12. **电子商务**
- **客户细分**:根据客户的购买行为和偏好将其分为不同的群体。
- **价格优化**:根据市场需求和竞争情况优化产品价格。

### 13. **语音识别**
- **说话人识别**:识别不同人的声音。
- **语音命令识别**:识别用户的语音命令并执行相应的操作。

### 总结
SVM因其在高维空间中的强大分类能力、对噪声的鲁棒性以及良好的泛化性能,在许多实际问题中得到了广泛应用。选择合适的核函数和参数调优是成功应用SVM的关键。

相关文章:

SVM支持向量机python实现

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种强大的监督学习算法&#xff0c;主要用于分类和回归任务。SVM的核心思想是找到一个最优的超平面&#xff0c;使得不同类别的数据点能够被尽可能清晰地分开&#xff0c;并且这个超平面与最近的数据点之间有…...

linux查看系统类型

要确定系统是 Ubuntu 还是 CentOS&#xff0c;可以通过查看系统的发行版信息来判断。以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用 cat 命令查看 /etc/os-release 文件 这个文件包含了系统的详细信息&#xff0c;包括发行版名称和版本号。 cat /etc/os-release…...

SpringSecurity 捕获自定义JWT过滤器抛出的异常

自定义过滤器如下&#xff1a; /*** jwt过滤器&#xff0c;验证令牌是否合法** author 朱铭健*/ Slf4j public class JwtAuthenticationFilter extends OncePerRequestFilter {Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse resp…...

中小型企业网络的设计与实现

资料下载中小型企业网络的设计与实现论文资源-CSDN文库 摘 要 本文规划的是一个公司的网络搭建&#xff0c;网络设计包括了多个部门的网络架构&#xff0c;每个部门通过VLAN进行隔离&#xff0c;确保了网络的安全性和高效。 华为企业网络模拟平台&#xff08;ENSP&#xff09…...

小马识途海外媒体推广有何优势?

互联网让地球变得像一个村子一样&#xff0c;信息可以瞬间变得人尽皆知&#xff0c;商品和服务也同样习惯了跨国合作。中国不少物美价廉的产品在世界各地都很受欢迎&#xff0c;国内小资群体对国外的服饰和美妆更是偏爱有加。小马识途营销顾问认为&#xff0c;中国品牌不出走国…...

Spring Boot知识管理:跨平台集成方案

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

逆向工程基本流程

1 逆向的基本流程 1获取目标app (官网,豌豆荚),尽量不要去华为应用市场,小米应用市场下载–多渠道打包,安装到手机上 2使用抓包工具 抓包分析(charles,fiddler…) 3使用反编译工具 (JADX,JD-GUI。。),把apk反编译成java代码,分析java代码,定位代码位置 4 使用动态分…...

target_include_directories是如何组织头文件的?

target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 这条 CMake 命令用于指定编译目标&#xff08;在此例中为 mylib 静态库&#xff09;的头文件搜索路径。具体来说&#xff0c;这条命令的作用包括以下几个方面&#xff1a; 1. 添加包含目录 mylib&…...

【Flutter】Dart:运算符

在 Dart 中&#xff0c;运算符是非常重要的组成部分&#xff0c;它们可以对变量和常量进行多种运算操作。理解和掌握 Dart 中的各种运算符不仅可以帮助你编写更加高效、简洁的代码&#xff0c;还能更好地理解其背后的逻辑和设计。本文将深入探讨 Dart 中的运算符&#xff0c;包…...

ChatGPT01-preivew体验报告:内置思维链和多个llm组合出的COT有啥区别呢?丹田与练气+中学生物理奥赛题测试,名不虚传还是名副其实?

一个月前&#xff0c;o1发布的时候&#xff0c;我写了篇文章介绍 逻辑推理能力堪比博士生&#xff0c;OpenAI发布全新AI模型系列&#xff1a; o1 - 大模型或许进入新阶段&#xff0c;还翻译了官方的介绍 解密OpenAI o1是如何让LLMs获得逻辑推理能力的 - CoT * RL&#xff0c;也…...

《云计算网络技术与应用》实训6-1:配置KVM虚拟机使用NAT网络

任务1、计算节点基础环境准备 1. 使用VMware安装CentOS 7虚拟机&#xff0c;安装时记得开启CPU虚拟化&#xff0c;命名为“KVMC6”。 2. &#xff08;网卡配置和之前的一样&#xff0c;都用100网段&#xff09;网关设置为192.168.100.1&#xff0c;地址段为192.168.100.10-25…...

【Unity新闻】Unity 6 正式版发布

Unity CEO Matt Bromberg 在今天自豪地宣布&#xff0c;Unity 6 正式发布&#xff01;作为迄今为止最强大和稳定的版本&#xff0c;Unity 6 为游戏和应用开发者提供了大量的新功能和工具&#xff0c;帮助他们加速开发并提升性能。 本次正式版是6.0000.0.23f1&#xff08;LTS&a…...

基于语音识别的停车共享小程序(lw+演示+源码+运行)

目 录 1 绪论1 1.1 课题研究背景1 1.2 研究现状1 1.3 论文结构安排1 2 系统关键技术2 2.1 微信小程序2 2.2 微信Web开发者工具2 2.3 JavaScript简介2 2.4 微信小程序API接口2 2.5 MYSQL数据库2 3 系统分析1 3.1 可行性分析1 3.1.1 技术可行性1 3.1.2 经济可行性1…...

编程考古-计算机发展(上)

计算机/器现在是我们日常生活中的重要工具&#xff0c;它的发展历程见证了人类数学计算能力的不断提升。 什么是计算 计算的本质在于基于规则对符号串进行变换。简言之&#xff0c;从一个初始的符号串&#xff08;输入&#xff09;出发&#xff0c;依据既定的法则逐步改变这个…...

pc轨迹回放制作

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;pc轨迹回放制作 主要内容&#xff1a;制作车辆轨迹操作页&#xff0c;包括查询条件、动态轨迹回放、车辆轨迹详情表单等 应用场景&#xff1a;车辆…...

无向图中的一些问题与处理(上接无向图知识简记)

一、有向图中的排序与调度 1、深度优先搜索的排序 使用深度优先搜索对图中顶点进行排序&#xff0c;根据数据结构性质与递归保存顺序&#xff0c;有以下三种排列顺序 &#xff08;1&#xff09; 前序&#xff1a;在递归调用之前将顶点加入队列。 &#xff08;2&#xff09;后…...

AIGC助力小学生编程梦:C++入门不再难!

文章目录 一、AIGC时代下的编程教育新趋势二、小学生C入门趣味编程的意义三、小学生C入门趣味编程的实践策略四、面临的挑战与应对策略五、AIGC技术在小学生C编程中的应用与前景《小学生C趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容&#xff08;…...

AI开发-三方库-Hugging Face-Pipelines

1 需求 需求1&#xff1a;pipeline支持的任务类型 需求2&#xff1a;推理加速使用CPU还是GPU 需求3&#xff1a;基于pipeline的文本分类示例 需求4&#xff1a;pipeline实现原理 模型使用步骤&#xff08;Raw text -》Input IDs -》Logits -》Predictions&#xff09;&…...

【Python网络编程】学习Socket编程,打造网络应用!

【Python网络编程】学习Socket编程&#xff0c;打造网络应用&#xff01; 网络编程是现代计算机科学中的重要一环&#xff0c;几乎所有的应用都依赖网络传输数据。无论是创建简单的客户端-服务器模型&#xff0c;还是构建复杂的网络应用&#xff0c;Socket 编程都是关键的技术…...

docker (desktopcompose) download

docker docker-compose download 百度网盘获取离线包链接release-notes 参考dockerdocker-composewlspowershell...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...