首页 > 其他分享 >亦菲喊你来学机器学习(15) --支持向量机SVM

亦菲喊你来学机器学习(15) --支持向量机SVM

时间:2024-08-29 09:22:37浏览次数:6  
标签:SVM 15 -- 样本 plt 超平面 gamma svm

文章目录

支持向量机

支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于分类和回归分析,尤其擅长处理二元分类问题。以下是关于SVM的详细解析:

一、基本概念

  • 定义:SVM是一种按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
  • 核心思想:通过寻找一个超平面来划分样本空间,使得不同类别的样本尽可能被分开,并且不同类别样本之间的间隔最大化。

二、工作原理

线性可分:线性可分(Linearly Separable)是机器学习中的一个概念,特别是在分类问题中。它指的是在一个特征空间中,如果存在一个超平面(Hyperplane),能够将不同类别的样本完全分开,则称这些样本是线性可分的。

  1. 线性可分情况:

    • 当数据线性可分时,SVM的目标是找到一个超平面,使得该超平面两侧的样本点分别属于不同的类别,并且超平面到最近样本点的距离(即边距)最大化。
    • 这些距离超平面最近的样本点被称为支持向量(support vectors),它们对确定超平面的位置至关重要。
  2. 非线性可分情况:

    • 对于非线性可分的数据集,SVM可以通过核方法(kernel method)将数据映射到高维空间,使其在高维空间中线性可分。
    • 常见的核函数包括线性核多项式核径向基函数(RBF)核等。

三、算法特点

  1. 稀疏性:SVM的解具有稀疏性,即大部分训练样本不会对决策边界产生影响,只有支持向量才会影响决策边界的位置。
  2. 稳健性:由于决策边界仅由支持向量决定,因此SVM对异常点(噪声)的鲁棒性较强。
  3. 适用小样本:SVM在小样本集、非线性数据集和高维空间中表现出色。
  4. 准确率高:SVM的准确率通常较高,尤其是在处理分类问题时。

四、优缺点

优点

  1. 对小样本集、非线性数据集和高维空间有较好的效果
  2. 准确率很高
  3. 自带L2正则化,一定程度减少过拟合
  4. 维数大于样本数情况有效,比如文本分类。

缺点

  1. 大量数据集训练时间比较长:如果特征和数据量均较大,训练时间可能会显著增加。
  2. 不适用大型数据集:由于SVM算法的时间复杂度与训练样本的数量呈正比,因此在大规模数据集上应用时可能受到限制。
  3. 数据集有较多噪声时,SVM效果不好:虽然SVM对异常点有一定的鲁棒性,但当噪声过多时,其性能可能会受到影响。
  4. 参数选择复杂:SVM中存在一些重要的参数(如正则化参数C、核函数参数等),这些参数的选择对模型的性能影响较大,需要进行交叉验证等复杂的调参过程。

五、构建模型

模型参数

class sklearn.svm.SVC(C=1.0,kernel='rbf',degree=3,
gamma='auto_deprecated',coef0=0.0,shrinking=True,probability=False,
tol=0.001,cache_size=200,class_weight=None,verbose=False,max_iter=-1,
decision_function_shape='ovr',random_state=None)[source]

重要的参数有:C、kernel、degree、gamma:

-- C :惩罚因子【浮点数,默认为1.】【软间隔】
    (1)C越大,对误分类的惩罚增大,希望松弛变量接近0,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱;
    (2)C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
    ->>建议通过交叉验证来选择

-- kernel: 核函数【默认rbf(径向基核函数|高斯核函数)】可以选择线性(linear)、多项式(poly)、sigmoid->>多数情况下选择rbf

-- degree:【整型,默认3维】多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。->>按默认【选择rbf之后,此参数不起作用】

-- gamma: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。
    (1)如果gamma是’auto’,那么实际系数是1 / n_features,也就是数据如果有10个特征,那么gamma值维0.1。(sklearn0.21版本)
    (2)在sklearn0.22版本中,默认为’scale’,此时gamma=1 / (n_features*X.var())#X.var()数据集所有值的方差。
        <1>gamma越大,过拟合风险越高
        <2> gamma越小,过拟合风险越低
        ->>建议通过交叉验证来选择

了解参数之后,我们就来尝试完成对模型的搭建吧!

  1. 训练模型
  2. 可视化svm结果

训练模型

  1. 收集数据
    链接: 训练数据
    提取码: 3k7s

  2. 数据预处理

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('iris.csv',header=None)
x = data.iloc[:,[1,3]] #选取第二列和第四列
y = data.iloc[:,-1]
  1. 训练模型
from sklearn.svm import SVC
svm = SVC(kernel='linear',C = float('inf'),random_state=0)
svm.fit(x,y)

训练完成模型之后,查看参数w与偏置项b:
fit()完模型后,会有coef_和intercept_属性,分别对应参数w和b,可将其取出来:
在这里插入图片描述

#参数w[原始数据为二维数组]
w = svm.coef_[0]
#偏置项b[原始数据为一维数组]
b = svm.intercept_[0]

可视化svm结果

#超平面方程:w1x1+w2x2+b=0 ----> x2 = -(w1x1+b)/w2
import numpy as np

x1 = np.linspace(0,7,300)#在0~7之间产生300个数据
#超平面方程
x2 = -(w[0]*x1+b)/w[1]  #自动计算得到x2
#上超平面方程
x3 = (1-(w[0]*x1+b))/w[1]  #
#下超平面方程
x4 = (-1-(w[0]*x1+b))/w[1]

#可视化原始数据,选取1维和3维的数据进行可视化
plt.scatter(data1[1],data1[3],marker='+',color='b')
plt.scatter(data2[1],data2[3],marker='o',color='b')
#可视化超平面
plt.plot(x1,x2,linewidth=2,color='r')
plt.plot(x1,x3,linewidth=1,color='r',linestyle='--')
plt.plot(x1,x4,linewidth=1,color='r',linestyle='--')
#进行坐标轴限制
plt.xlim(4,7)
plt.ylim(0,5)

#找到支持向量[二维数组]可视化支持向量
vets = svm.support_vectors_
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')

plt.show()

在这里插入图片描述

这样我们就构建好一个SVM模型啦!!

总结

本篇介绍了:

  1. 什么是SVM
  2. 如何构建SVM模型
  3. 如何将模型结果可视化

标签:SVM,15,--,样本,plt,超平面,gamma,svm
From: https://blog.csdn.net/m0_74896766/article/details/141651197

相关文章

  • 历年CSP-J初赛真题解析 | 2016年CSP-J初赛阅读程序(23-26)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>usingnamespacestd;intmain(){intmax,min,sum,count=0;inttmp;cin>>tmp;......
  • 模型 麦肯锡七步成诗法
    系列文章分享 模型,了解更多......
  • Linux三剑客之grep命令详解
    grep是Linux中最常用的文本搜索工具,用于在文件或文本输出中查找与指定模式匹配的行。它支持基本正则表达式、扩展正则表达式、多文件搜索、递归搜索等多种功能,非常适合过滤、搜索和提取文本内容。1.grep的基本语法grep[选项]模式[文件...]模式:搜索的文本模式,可......
  • 13.JS学习篇-ES6 React 项目模板
    1.项目能力支持1.项目初始化脚手架1.前端编码规范工程化(lint工具、NodeCLI等)2.用工具提升项目的编码规范,如:eslint、stylelint、commitlint、markdownlint、husky等3.工具对于JavaScript、Typescript、React、Vue等不同类型的前端项目下的标准的语法限制;2.相关基础功能......
  • nginx rewrite模块之if和return
    ngx_http_rewrite_module将用户请求的URI基于PCREregex所描述的模式进行检查,而后完成重定向替换 if:Syntax: if(condition){...}Default: —Context: server,location条件满足时,执行配置块中的配置指令condition:比较操作符: =相同!=不同 ......
  • nginx之http跳转https
    http跳转https实现示例:ssl配置参考“https”实现文章法一:2个虚拟主机配置:[[email protected]]#vim/apps/nginx4/conf/conf.d/test.confserver{listen443ssl;#listen80;server_namewww.magedu.org;root/data/site14/;......
  • nginx rewrite模块之rewrite
    未完成ngx_http_rewrite_module rewriteregexreplacement[flag]将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮......
  • nginx之错误url重定向到首页
    nginx之错误url重定向到首页1、配置:[[email protected]~]#vitest.confserver{listen443ssl;listen80;server_namewww.magedu.org;root/data/site14/;#sslon;ssl_certificate/apps/nginx4/ssl/magedu.org.crt;......
  • nginx扩展之支持多个ssl加密虚拟主机
    nginx支持一台服务器唯一IP:PORT,根据server_name创建区分多个经过ssl加密的https虚拟主机,apache不支持 生成www.magedu.net域名证书:[[email protected]]#cd/etc/pki/tls/certs/[[email protected]]#vimMakefile%.key:umask77;\#/usr/bin/ope......
  • [AGC008F] Black Radius
    缕一缕大概思路。首先假设所有点都被喜欢。一个集合可能被多个\((u,d)\)表示出来,我们取最小\(d\),只有在全集的时候一个最小\(d\)可能会有多个\(u\)进行对应,所以我们去掉对全集的统计。接着考虑以一个点为中心的充要条件。设为\((u,d)\),首先\(d\)不能太大,否则会超出......