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

针对SVM算法初步研究

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝

心态决定高度,细节决定成败!

  

初识SVM算法:

        支持向量机(Support Vector Machine, SVM)是一种监督学习算法,主要用于分类和回归分析。SVM的基本模型是定义在特征空间上的间隔最大的线性分类器,其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。在分类任务中,SVM试图找到一个超平面来区分不同类别的数据,这个超平面不仅需要正确地分类训练数据,而且还要确保两类数据到这个超平面的距离最大化,这样可以使得模型具备更好的泛化能力。

        SVM能够执行线性或非线性分类、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。

超平⾯最⼤间隔

下面左图显示了三种可能的线性分类器的决策边界,虚线代表的模型表现⾮常糟糕,甚⾄都⽆法正确实现分类。

其余两个模型(红线和紫线)在训练集上表现比较完美,但是它们的决策边界与实例过于接近,导致在⾯对新实例时,表现可能不会太好。

而下面右图中的实线代表不仅分离了两个类别,且尽可能远离最近的训练实例

硬间隔和软间隔:

硬间隔分类:

        在上面我们使用超平面进行分割数据的过程中,如果我们严格地让所有实例都不在最大间隔之间,并且位于正确的一边,这就是硬间隔分类。

        硬间隔分类有两个问题,首先,它只在数据是线性可分离的时候才有效;其次,它对异常值非常敏感。

软间隔分类:

        要避免这些问题,最好使用更灵活的模型。目标是尽可能在保持最大间隔宽阔和限制间隔违例(即位于最大间隔之上,甚至在错误的一边的实例)之间找到良好的平衡,这就是软间隔分类。

下面我们来用python写一个简单的SVM模型:

使用Python实现一个简单的SVM算法,可以使用scikit-learn库,这是一个非常流行的机器学习库,它提供了SVM的支持。

首先,需要安装scikit-learn,可以通过pip来安装:

pip install scikit-learn

# 导入必要的库
from sklearn import svm  # SVM分类器
from sklearn.datasets import make_blobs  # 生成模拟数据
import numpy as np  # 数值计算库# 生成一些随机数据点,分成两组
X, y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)# 创建一个线性核函数的SVM分类器
# kernel='linear' 指定使用线性核函数
# C=1.0 是惩罚参数C的倒数,表示对误分类的容忍度
clf = svm.SVC(kernel='linear', C=1.0)# 使用生成的数据训练SVM模型
# fit方法接受特征矩阵X和目标向量y
clf.fit(X, y)# 生成两个新的数据点,准备用于预测
new_data = np.array([[0, 0], [1, 1]])# 使用训练好的模型对新数据点进行预测
predictions = clf.predict(new_data)# 打印预测结果
print("Predictions:", predictions)

代码解释:

  1. 导入必要的库

    • sklearn:Scikit-Learn库,提供了各种机器学习算法。
    • numpy:用于数值运算的库。
  2. 生成数据

    • make_blobs函数用于生成一组模拟的聚类数据点。
    • n_samples参数指定要生成的数据点数量。
    • centers参数指定中心点的数量,本例中为2,意味着生成的数据将大致分为两组。
    • random_state用于设置随机种子,保证每次运行生成相同的数据。
    • cluster_std参数指定了簇的标准差,用来控制生成数据的分散程度。
  3. 创建SVM分类器

    svm.SVC()创建一个支持向量分类器对象。kernel='linear'参数指定使用线性核函数,即寻找一个线性决策边界。C=1.0参数控制了对误分类的惩罚程度,较大的C值意味着模型对误分类的容忍度更低。
  4. 训练模型

    fit(X, y)方法用于训练模型,其中X是特征矩阵,y是目标向量。
  5. 预测新数据

    predict(new_data)方法用于对新的数据点进行分类预测。
  6. 输出结果

    最后,打印出对新数据点的预测结果。

        这个示例展示了如何使用scikit-learnSVC类创建并训练一个简单的线性SVM分类器,并使用该分类器对新的数据点进行预测。这种类型的SVM非常适合处理线性可分的问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【TabBar嵌套Navigation案例-复习昨天的内容-预习今天的内容 Objective-C语言】
  • 【数据结构】线性表的定义和基本操作
  • Java零基础-charAt(int index)详解
  • 从零实现诗词GPT大模型:实现多头自注意力
  • 如何使用命令行快速下载Google Drive/OneDrive大文件
  • 【时间盒子】-【6.任务页面】在同一个页面新建、编辑任务
  • 阳极氧化废酸处理
  • 陶建辉演讲干货分享,AI 时代下的数据预测和数据处理挑战
  • PL/SQL 继承Oracle Database 的可靠性、安全性和可移植性
  • Note24091201_组态王画面按钮静音设置
  • springboot教学检查管理系统---附源码77417
  • 12_持久化数据结构
  • ModuleNotFoundError: No module named ‘flask._compat‘
  • web基础之SSRF
  • 微积分复习笔记 Calculus Volume 1 - 2.1 A Preview of Calculus
  • Android框架之Volley
  • Apache Zeppelin在Apache Trafodion上的可视化
  • CSS3 变换
  • ECMAScript6(0):ES6简明参考手册
  • HTTP那些事
  • Java新版本的开发已正式进入轨道,版本号18.3
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 记一次用 NodeJs 实现模拟登录的思路
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 手写双向链表LinkedList的几个常用功能
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • Nginx实现动静分离
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ###C语言程序设计-----C语言学习(6)#
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (6)设计一个TimeMap
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)PySpark3:SparkSQL编程
  • (回溯) LeetCode 46. 全排列
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)http-server应用
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)从 Java 代码到 Java 堆
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • 、写入Shellcode到注册表上线
  • .Net 6.0 处理跨域的方式
  • .Net 6.0--通用帮助类--FileHelper
  • .NET 8 跨平台高性能边缘采集网关
  • .net core 依赖注入的基本用发
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • /boot 内存空间不够
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @ConditionalOnProperty注解使用说明
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解