AI - 支持向量机算法

🧨概念

支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于解决二分类问题

SVM的核心思想是找到一个超平面,这个超平面能够最好地将数据分为两类,即在保证分类准确的情况下,使得两个类别的数据到超平面的最小距离(即间隔)最大。

  • 对于线性可分的数据,SVM通过硬间隔最大化学习一个线性分类器。这意味着所有训练样本都能够被超平面正确分开,并且最近的样本点与超平面之间的距离(即间隔)达到最大。
  • 当数据不是完全线性可分时,SVM通过软间隔最大化来学习一个线性分类器。这意味着允许一些样本不满足硬间隔的要求,但仍然尽可能地使间隔最大化。
  • 对于非线性可分的数据,SVM使用核技巧将数据映射到更高维度的空间中,使其变得线性可分,然后再进行间隔最大化。这种方法使得SVM成为一个实质上的非线性分类器。
  • 无论是线性还是非线性的情况,SVM的求解过程最终都转化为一个凸二次规划问题。这是因为SVM的目标函数是一个凸函数,可以通过求解凸优化问题来找到全局最优解。
  • 由于其坚实的理论基础和良好的泛化能力,SVM在许多领域都得到了广泛的应用,包括文本分类、图像识别、生物信息学等。

🧨引入

对于桌面上颜色不同的两种小球,用一根棍分开它们,我们可以直接将其放在两种小球中间隔开他们,尽可能使得木棍距离两个群体都远,这样可以方便更多数据进来时有更好的分辨率。 

我们放了更多的球,棍仍然是一个好的分界线,但如果我们打乱小球分布,该如何隔开他们?

 

现在,我们没有棍可以很好帮他分开两种球了 ,我们可以将小球扔到空中进入一个多维空间

但在上边看来就是一个曲线隔开的。我们的数据就是小球data,棍子就是分类器classifier 。

🧨支持向量机分类

  • 线性SVM:对于线性可分的数据,SVM能够找到一个超平面,使得所有训练样本都能够被正确分开,并且最近的样本点与超平面之间的距离(即间隔)达到最大。这种情况下的SVM称为线性SVM。
  • 非线性SVM:当数据在原始空间中不是线性可分时,SVM使用核技巧将数据映射到更高维度的空间中,使其变得线性可分。在这个高维特征空间中,SVM学习一个线性分类器来进行分类。这种方法使得SVM成为一个实质上的非线性分类器。

根据在检验样本上的运行效果,分类器必须从这些分类超平面中选择一个来表示它的决策边界。满足这个条件的很多,但是使得泛化误差最小的条件就是边际margin最大的情况。

🧨 软间隔和硬间隔 

  • 硬间隔指的是让所有的样本都不在最大间隔之间,并位于正确的一边,这就是硬间隔。如果出现异常值、或者样本不能线性可分,此时硬间隔无法实现。        
  • 软间隔指的是我们容忍一部分样本在最大间隔之内,甚至在错误的一边。相对来说,软间隔可以应用在一些线性不可分的场景。 

🧨惩罚参数 C  

SVM中的惩罚参数C是一个非常重要的超参数,它决定了算法对错误分类的容忍度。

在SVM中,C参数用于控制间隔大小与分类误差之间的权衡。较大的C值意味着算法更加重视分类误差,即算法会尽量减小训练集上的分类错误。相反,较小的C值意味着算法更加重视最大化间隔,即使这可能导致在训练集上有更多的分类错误。

C值的选择对模型的泛化能力有显著影响。如果C设置得过大,模型可能会过度拟合训练数据,导致在未知数据上的表现不佳。这是因为模型过于关注训练集中的每个样本,包括那些可能仅仅是噪声的样本。相反,如果C设置得过小,模型可能会欠拟合,即对训练数据的分类错误过多,这也会影响模型在新数据上的性能。 

在实际的应用中,选择合适的C值是非常重要的。通常,这需要通过交叉验证等技术来进行评估和选择。 

🧨SVM损失函数

SVM的损失函数通常指的是合页损失函数(Hinge Loss),它是一种变种损失函数,用于最大间隔分类。合页损失函数的表达式为:

 

yi​ 是样本的标签,omega 和 b 分别是模型的权重和偏置项,xi​ 是第 i 个样本的特征向量。这个损失函数的第一部分是经验风险,它度量了模型对训练数据的拟合程度。当预测值与实际标签之间的差距大于1时,损失为0;否则,损失为1−yi​(ωTxi​+b)。

🧨鸢尾花种类预测 

Iris 数据集是常用的分类实验数据集,也称鸢尾花卉数据集,是一类多重变量分析的数据集。 

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVCif __name__ == '__main__':# 加载数据集x, y = load_iris(return_X_y=True)# 数据集分割x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y)# 特征值标准化transformer = StandardScaler()x_train = transformer.fit_transform(x_train)x_test = transformer.transform(x_test)# 模型训练estimator = SVC()estimator.fit(x_train, y_train)# 模型预测print(estimator.score(x_test, y_test))

分割数据集时stratify=y的作用是在划分训练集和测试集时,保持类别的比例。这样可以确保在训练集和测试集中各类别的比例与原始数据集中的比例相同,有助于避免因数据分布不均导致的模型性能偏差。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 2. 01背包问题

题目描述 解题思路: 相关代码: import java.util.Scanner; public class Main {public static void main(String[] args){Scanner scanner new Scanner(System.in);/** 背包问题的物品下标最好从1开始。* *//*定义一f[i][j]数组,i表示的…

Go——运算符,变量和常量,基本类型

一.运算符 Go语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意:(自增)和--(自减)在go语言中是单独的语句,并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…

202206青少年软件编程(图形化) 等级考试试卷(二级)

青少年软件编程(图形化) 等级考试试卷(二级)2022年6月 第1题:【 单选题】 角色初始位置如图所示,下面哪个选项能让角色移到舞台的左下角? ( ) A: B: C: D: 【正确答案】: C 【试题解析】 : 舞台的左下角, 坐标 x 为负数, 坐标 y 为负数, 故应该使用移…

在pzp203上运行ad9361 no-os工程

0. 环境 - pzp203 - ubuntu18 vivado2018 pzp203是一款plutosdr的国产兼容版。出厂默认是基于linux系统的,用libiio调用。软硬件兼容adalm-pluto。开发板提供网盘资料,是添加了板卡适配的。 1. hdl 1.1 准备源码 hdl https://github.com/analogdevi…

白话模电:3.三极管(考研面试与笔试常考问题)

一、三极管的简单判断 1.判断三极 1)给了图 左边是b,有箭头是e,剩下是c 2)给了电位 b:中间值,e:较近值(离中间值),c:较远值(离中间值) 2.判断流向 bc同向(共同流向“|”或共同流离“|”),e与bc反向 3.判断材料 4.判断类型 5.判断能否构…

15 顶级的免费 SD 卡恢复软件来恢复丢失的数据

查看顶级 SD 卡恢复软件。比较功能并选择最好的免费或付费存储卡数据恢复软件: SD 卡是一种方便的小硬件,可用于存储数据。了解这些设备在首次推出几十年后仍然如此受欢迎是一件很有趣的事情。尽管我们可以使用其他可以说是更好的替代品,但它…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextPicker)

滑动选择文本内容的组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextPicker(options?: {range: string[] | string[][] | Resource | TextPickerRangeContent[] | Te…

python副业兼职手段有哪些

经过多年的总结,鄙人发现python是最适合做兼职副业的编程语言,无论是国内还是国外,对python的需求非常大,python简直就是万能语言。Python副业兼职手段有以下几种: 兼职处理数据:Excel整理数据功能虽然很强…

C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码

1 分词 分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词问题。但有些情况下,没有空格,则需要好的分词算法。…

MacBook使用——彻底卸载并删除软件:NTFS for Mac

问题 之前因MacBook读写NTFS格式移动硬盘,我安装并使用了 Paragon NTFS for Mac ,试用期结束后将其从【应用程序】中卸载移除了。但之后每次开机启动时,系统还是会弹出【激活】通知,如下图 解决 Step1、在用户目录下的 Library 目…

simulink汽车动力特性模型

1、内容简介 略 76-可以交流、咨询、答疑 simulink汽车动力特性模型 节气门、Gasoline Engine、离合器、作动器 2、内容说明 略 齿轮半径1 0.06; 齿轮半径2 0.072; 有效齿轮半径 2/3*(radius2^3 - radius1^3)/(radius2^2 - radius1^2); 输入传动比 2.1; 输出传动比 1…

输出三行正三角形--c语言

#include<stdio.h> int main(){int i,j;for(i1;i<3;i){for(j3-i;j>1;j--){printf(" ");}for(j1;j<i*2-1;j){printf("*");}printf("\n");}return 0;} 输出结果&#xff1a;