机器学习之SVM

article/2025/8/25 2:35:43

文章目录

  • 一、SVM基本介绍
  • 二、SVM工作原理
    • 1. 线性支持向量机(数据可分)
    • 2. 软边距支持向量机(数据不可分)
  • 三、sklearn实现SVM
    • 注:SVM涉及距离,需要先数据标准化处理
    • 1. 线性SVM
      • LinearSVC() 构造函数的参数及默认值
    • 2. 非线性SVM
      • (1)线性SVM中使用多项式特征
      • (2) 使用多项式核函数的SVM
        • SVC() 构造函数的参数及默认值
    • 3. 使用SVM思想解决回归问题
  • 总结
    • 优缺点
    • 问题

一、SVM基本介绍

Support Vector Machine支持向量机

  1. 用于分类问题,也可以用于回归问题
  2. 监督学习算法

二、SVM工作原理

最大化margin,几何间隔越大,分类的把握性越大,即错误率越低

1. 线性支持向量机(数据可分)

注意分类类别划分为了 -1和1,而不是0和1,是为了后续(图1最下行)将两式子化为一个式子。y取-1,数据点代入也小于0,相乘还是大于1。

2. 软边距支持向量机(数据不可分)


三、sklearn实现SVM

注:SVM涉及距离,需要先数据标准化处理

标准化处理前

上图为纵轴范围0-10000,下图将纵轴范围标准化到0-1
若不标准化处理,会严重影响求出的决策边界

标准化处理后

1. 线性SVM

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasetsiris = datasets.load_iris()X = iris.data
y = iris.targetX = X[y < 2, :2]  # 只取前两个特征
y = y[y < 2]      # 只取y=0 y=1,二分类问题from sklearn.preprocessing import StandardScalerstandardScaler = StandardScaler()   # 要先数据归一化
standardScaler.fit(X)
X_standard = standardScaler.transform(X)from sklearn.svm import LinearSVCsvc = LinearSVC(C=1e9)  # C即正则化参数
svc.fit(X_standard, y)# 绘制决策边界略

LinearSVC() 构造函数的参数及默认值

LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,intercept_scaling=1, loss='squared_hinge', max_iter=1000,multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,verbose=0)
  1. penalty:默认为’l2’,默认正则化方式为l2正则化,还有l1正则化。
  2. C:默认是1.0,正则化参数

2. 非线性SVM

(1)线性SVM中使用多项式特征


原moons数据集                   添加噪音的moons数据集

import numpy as np
import matplotlib.pyplot as pltfrom sklearn import datasetsX, y = datasets.make_moons(noise=0.15, random_state=666)  # noise噪音,添加标准差
# X.shape : (100, 2) ---- y.shape : (100,)from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline# 使用Pipeline方便以下操作顺序执行
def PolynomialSVC(degree, C=1.0):return Pipeline([("poly", PolynomialFeatures(degree=degree)),    # 第一步传入degree("std_scaler", StandardScaler()),               # 第二步数据归一化("linearSVC", LinearSVC(C=C))                   # 第三步调用svm算法,C是正则化参数])poly_svc = PolynomialSVC(degree=3)
poly_svc.fit(X, y)  # 训练# 绘制决策边界
def plot_decision_boundary(model, axis):x0, x1 = np.meshgrid(np.linspace(axis[0], axis[1], int((axis[1] - axis[0]) * 100)).reshape(-1, 1),np.linspace(axis[2], axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1, 1),)X_new = np.c_[x0.ravel(), x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_cmap = ListedColormap(['#EF9A9A', '#FFF59D', '#90CAF9'])plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)plot_decision_boundary(poly_svc, axis=[-1.5, 2.5, -1.0, 1.5])
plt.scatter(X[y == 0, 0], X[y == 0, 1])
plt.scatter(X[y == 1, 0], X[y == 1, 1])
plt.show()

决策边界

(2) 使用多项式核函数的SVM

什么是核函数
高斯核函数RBF参考视频bobo老师课程

# 数据集的准备等同上 略
from sklearn.svm import SVCdef PolynomialKernelSVC(degree, C=1.0):return Pipeline([("std_scaler", StandardScaler()),("kernelSVC", SVC(kernel="poly", degree=degree, C=C))    # 自动对传进来的数据进行多项式化,再进行SVM])poly_kernel_svc = PolynomialKernelSVC(degree=3)
poly_kernel_svc.fit(X, y)plot_decision_boundary(poly_kernel_svc, axis=[-1.5, 2.5, -1.0, 1.5])
plt.scatter(X[y == 0, 0], X[y == 0, 1])
plt.scatter(X[y == 1, 0], X[y == 1, 1])
plt.show()

决策边界

SVC() 构造函数的参数及默认值

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma='auto', kernel='poly', max_iter=-1, probability=False, random_state=None, 	shrinking=True, tol=0.001, verbose=False)
  1. kernel:核函数类型,默认为’rbf’,取’poly’时为多项式核函数
  2. C:默认是1.0,正则化参数
  3. degree:多项式核函数的阶数,默认为3。
  4. coef0:核函数中的独立项,多项式核函数中的c

3. 使用SVM思想解决回归问题


不同点:margin范围里包含的点越多越好,说明这个范围更能比较好的表达样本数据点,取中间直线作为回归结果,预测未知点的y值, ε超参数用于指定margin

from sklearn import datasetsboston = datasets.load_boston()
X = boston.data
y = boston.targetfrom sklearn.model_selection import train_test_split  # 划分数据集X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)from sklearn.svm import LinearSVR
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipelinedef StandardLinearSVR(epsilon=0.1):return Pipeline([('std_scaler', StandardScaler()),     # 数据标准化('linearSVR', LinearSVR(epsilon=epsilon))  # 也可用SVR()传入不同的核函数来处理数据])svr = StandardLinearSVR()
svr.fit(X_train, y_train)print(svr.score(X_test, y_test))

对于线性SVM,用LinearSVR(或者LinearSVC),而不使用SVR(或者SVC) kernel=‘linear’。一般情况二者的结果没有差异。且LinearSVR(LinearSVC)效率会更高一些


总结

优缺点

1. 优点

  • 可用于线性/非线性分类(引入核函数),也可以用于回归。泛化错误率低,也就是说具有良好的学习能力,且学到的结果具有很好的推广性。
  • 可以解决小样本情况下的机器学习问题,可以解决高维问题,可以避免神经网络结构选择和局部极小点问题。
  • SVM是最好的现成的分类器,现成是指不加修改可直接使用。并且能够得到较低的错误率,SVM可以对训练集之外的数据点做很好的分类决策。

2. 缺点

  • 对参数调节和和函数的选择敏感,对缺失数据敏感
  • 在样本量非常大时,核函数中內积的计算,求解拉格朗日乘子α 值的计算都是和样本个数有关的,会导致在求解模型时的计算量过大
  • 用SVM解决多分类问题存在困难(需要通过多个二类支持向量机的组合来解决)

问题

  1. 待完善

http://chatgpt.dhexx.cn/article/K0bhNuZP.shtml

相关文章

如何将照片或者视频中的背景图抠掉,机器学习开源项目使用 | 机器学习

目录 前言 开源项目介绍 项目结构 模型下载 测试数据下载 训练数据下载 依赖下载 测试图片的抠图效果 测试视频的抠图效果 总结 前言 本文主要介绍一个神奇有意思的开源项目: BackgroundMattingV2 该项目可以将照片或者视频中人的背景扣掉&#xff0c;变成带alpha通…

机器学习进阶路上不可错过的 28 个视频

想自学机器学习和深度学习?不妨边看专家讲解视频边自学。不仅能感受世界各地专家的熏陶&#xff0c;也能快速获取知识&#xff0c;一举两得。这篇文章整理了一个 YouTube 视频列表&#xff0c;供希望在该领域学习的朋友使用。 视频观看建议 我将视频分为三类&#xff1a;机器学…

机器学习--降维

降维&#xff08;Dimensionality Reduction&#xff09; 视频参考&#xff1a;【机器学习】【白板推导系列】【合集 1&#xff5e;33】_哔哩哔哩_bilibili 笔记参考&#xff1a;降维 语雀 (yuque.com) PCA原理详解&#xff1a;主成分分析&#xff08;PCA&#xff09;原理详…

机器学习简介

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;清风数学建模&#xff1a;https://www.bilibili.com/video/BV1DW411s7wi 注&#xff1a; 因为要用到机器学习工具箱&#xff0c;所以至少需要安装MATLAB2017a的版本&…

python机器学习视频教程百度网盘下载(2023完整版)

文末扫码领资料全套学习路线图和 视频及配套资料 在Python中有很多机器学习的模块&#xff0c;比如Sklearn、Tensorflow、Caffe等&#xff0c;可以很方便地调用一些机器学习的算法。如果你对Python机器学习感兴趣&#xff0c;python机器学习教程哪个好&#xff1f;这份python机…

吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)

强烈感谢黄海广博士给的文章思路 本文中提及的作者便是黄海广博士本人 吴恩达老师的机器学习课程&#xff0c;可以说是机器学习入门的第一课和最热门课程&#xff0c;作者在github开源了吴恩达机器学习个人笔记&#xff0c;用python复现了课程作业&#xff0c;成为热门项目&am…

机器学习视频教程

1. Hadoop—Spark企业应用实战(推荐版) 链接&#xff1a;http://pan.baidu.com/s/1eSJsUTc 密码&#xff1a;q5lt 2. 西安交大应用统计分析SPSS1-48讲 链接&#xff1a;http://pan.baidu.com/s/1slSzYHJ 密码&#xff1a;8twg 3. Python科学计算 链接&#xff1a;http://pa…

机器学习必看的28个视频

想自学机器学习和深度学习&#xff1f;不妨边看专家讲解视频边自学。不仅能感受世界各地专家的熏陶&#xff0c;也能快速获取知识&#xff0c;一举两得。这篇文章整理了一个 YouTube 视频列表&#xff0c;供希望在该领域学习的朋友使用。 转自: http://easygeek.com.cn/articl…

struct timespec 和 struct timeval

转自&#xff1a;http://www.cnblogs.com/book-gary/p/3716790.html time()提供了秒级的精确度 . 1、头文件 <time.h> 2、函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在的秒数 用time()函数结合其他函数&#xff08;如&#xff1a;lo…

time.Timer

文章目录 前言一、代码二、DB三、效果 前言 今天观摩前辈的代码,看到time.Timer的使用,发现对于定时任务可以这样做达到js的setInterval()效果 一、代码 package mainimport ("fmt""gorm.io/driver/postgres""gorm.io/gorm""gorm.io/gorm…

软件测试之性能测试面试题合集(含答案分析细节)

前言 最近这一年&#xff0c;对性能测试有了更多的认知。 压力、强度测试&#xff1a;在一定软硬件环境下&#xff0c;通过高负载的手段来使服务器资源&#xff08;强调服务器资源&#xff0c;硬件资源&#xff09;处于极限状态&#xff0c;测试系统在极限状态下长时间运行是…

2023最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

软件测试面试必杀篇:【2023软件测试面试八股文宝典】

800道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、App测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题&am…

【面经】2023年软件测试面试题大全(持续更新)附答案

整理了一些软件测试方面的资料、面试资料&#xff08;接口自动化、web自动化、app自动化、性能安全、测试开发等&#xff09;&#xff0c;有需要的小伙伴可以文末关注我的VX公众号&#xff0c;无套路自行领取~ 前阵子一位读者告诉我&#xff0c;某位大厂HR给他发了我之前做的面…

软件测试常考面试题-软件测试面试宝典(一篇足矣)

软件测试常考面试题-软件测试面试宝典_MJ813的专栏-CSDN博客&#xff0c;对原文进行整理 扫码关注每日思悟&#xff1a; 介绍解决锻炼思维问题的思路和方法&#xff0c;从不同角度分析问题&#xff0c;让思维变强大&#xff0c;变宽广的同时在测试方面进行学习和方法的拓展&a…

2022最新整理软件测试常见面试题附答案

包含的模块&#xff1a; 本文分为十九个模块&#xff0c;分别是&#xff1a;软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以找我获取&…

软件测试的常用的面试题【带答案】

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫XXX&#xff0c;今年24岁&#xff0c;来自XX&#xff0c;就读专业是电子商务&#xff0c;毕业后就…

十道必问的软件测试面试题(含答案解析)

前言 &#xff08;第一个就刷掉一大批人&#xff09; 有很多“会自动化”的同学来咨询技术问题&#xff0c;他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问&#xff1a;你是定位不到吗&#xff1f;通常结果都是说确实定位不到。 做自…

软件测试最全面试题及答案整理(2022最新版)

目录 1、你的测试职业发展是什么? 2、你认为测试人员需要具备哪些素质 3、你为什么能够做测试这一行 4、测试的目的是什么? 5、测试分为哪几个阶段? 6、单元测试的测试对象、目的、测试依据、测试方法? 7、怎样看待加班问题 8、结合你以前的学习和工作经验&#xf…

软件测试面试——常见的面试问题总结(大全)

目录 1.软件测试级别&#xff1f; 2.软件测试类型&#xff1f; 3.测试方法&#xff1a;动态测试、静态测试&#xff1b;黑盒测试、白盒测试、灰盒测试。 、黑盒测试方法&#xff1a; 3、白盒测试方法&#xff1a; 4.alpha测试和beta测试的区别 5.测试设计方法&#xff1…