Ansible自动运维工具之playbook
目录
一.inventory主机清单
1.定义
2.变量
(1)主机变量
(2)组变量
(3)组嵌套
二.playbook基本内容
1.组成
(1)Tasks: 任务,即调用模块完成的某操作
(2)Variables: 变量
(3)Templates: 模板
(4)Handlers: 处理器,当某条件满足时,触发执行的操作
(5)Roles: 角色
2.基本语法
(1)大小写敏感
(2)使用缩进表示层级关系
(3)缩进时不允许使用tab键、只允许使用空格
(4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
3.数据结构
(1)对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
(2)数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)
(3)纯量:单个的、不可再分的值
三.playbook示例
1.为每个任务定义远程执行用户
2.指定远程主机切换用户执行剧本
3.tasks忽略错误,强制返回成功
(1)Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始。在运行playbook时 (从上到下执行),如果一个host执行task失败, 整个tasks都会停止。
(2)每一个task必须有一个名称 name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
4.针对多个主机节点执行剧本
5.Handlers概述
6.引入变量
(1)通过ansible命令参数-e传递
(2) 直接在yaml中定义,或者内置变量
(3)引用主机清单内自定义变量
7.条件测试
(1)单条件判断
(2)多条件判断
(3)组条件判断
(4)迭代
四.template
1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量
2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
3.编写 playbook
六.playbook使用roles
1.roles内各自目录含义
2.在playbook中使用roles
一.inventory主机清单
1.定义
Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。
2.变量
(1)主机变量
[webservers]
192.168.10.14 ansible_port=22 ansible_user=root ansible_password=abc1234
(2)组变量
[webservers:vars] #表示为 webservers 组内所有主机定义变量
ansible_user=root
ansible_password=abc1234[all:vars] #表示为所有组内的所有主机定义变量
ansible_port=22
(3)组嵌套
[nginx]
192.168.10.20
192.168.10.21
192.168.10.22[apache]
192.168.10.3[0:3][webs:children] #表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache
二.playbook基本内容
1.组成
(1)Tasks: 任务,即调用模块完成的某操作
(2)Variables: 变量
(3)Templates: 模板
(4)Handlers: 处理器,当某条件满足时,触发执行的操作
(5)Roles: 角色
2.基本语法
(1)大小写敏感
(2)使用缩进表示层级关系
(3)缩进时不允许使用tab键、只允许使用空格
(4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
| hosts | 定义节点,可以是组 |
| remote_user | 是你以什么用户身份进行登陆 |
| tasks | 是你的任务 |
| become:yes | 表示切换用户 |
| become_user: mysql | 表示切换到mysql用户,配合上一条使用 |
| - name: | 为下面执行的操作起名 |
3.数据结构
(1)对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
(2)数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)
(3)纯量:单个的、不可再分的值
三.playbook示例
ansible-playbook xxx.yaml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook xxx.yaml --list-task #检查tasks任务
ansible-playbook xxx.yaml --list-hosts #检查生效的主机
ansible-playbook xxx.yaml --start-at-task='xxx' #指定从某个task开始运行- hosts: webserver #指定主机组,可以是一个或多个组remote_user: root #指定远程主机执行的用户名
| 参数 | 说明 |
| -k(-ask-pass) | 用来交互输入ssh密码 |
| -K(-ask-become-pass) | 用来交互输入sudo密码 |
| -u | 指定用户 |
| -e | 引入变量值 |
1.为每个任务定义远程执行用户
cd /opt
vim 1.yaml- hosts: mysqlremote_user: roottasks:- name: test connectionping:remote_user: mysql ansible mysql -m user -a 'name=mysql'
ansible mysql -m shell -a 'echo 123123 | passwd --stdin mysql'
ansible-playbook 1.yaml -k
123123

2.指定远程主机切换用户执行剧本
vim 2.yaml- hosts: mysqlremote_user: rootbecome: yes become_user: mysql tasks:- name: copy textcopy: src=/etc/fstab dest=/home/mysql/fstab.bakansible-playbook 2.yaml

3.tasks忽略错误,强制返回成功
(1)Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始。在运行playbook时 (从上到下执行),如果一个host执行task失败, 整个tasks都会停止。
(2)每一个task必须有一个名称 name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
错误示例:遇到错误task自动停止,apache服务不会继续安装
vim 3.yaml- hosts: webserverremote_user: roottasks:- name: stop selinuxcommand: '/usr/sbin/setenforc 0'- name: install httpdyum: name=httpd- name: start httpdservice: name=httpd state=startedansible-playbook 3.yaml

加入ignore_errors: True 忽略错误,报错后继续执行
vim 3.yaml- hosts: webserverremote_user: roottasks:- name: stop selinuxcommand: '/usr/sbin/setenforc 0'ignore_errors: True- name: install httpdyum: name=httpd- name: start httpdservice: name=httpd state=startedansible-playbook 3.yaml

4.针对多个主机节点执行剧本
vim 4.yaml- hosts: webserverremote_user: roottasks:- name: remove httpdyum: name=httpd state=absent- hosts: mysqlremote_user: roottasks:- name: copy filecopy: src=/etc/fstab dest=/opt/haha.txt

5.Handlers概述
Handlers也是一些task的列表, 和一般的task并没有什么区别。
是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了 ,则Handlers被执行不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次
vim 5.yaml- hosts: webserverremote_user: roottasks:- name: remove httpdyum: name=httpd state=absent- name: start firewalldservice: name=firewalld state=started- name: setenforce 0 && install httpdcommand: '/usr/sbin/setenforce 0'notify:- step one- name: stop firewalld && start httpdservice: name=firewalld state=stoppednotify:- step twohandlers:- name: step oneyum: name=httpd- name: step twoservice: name=httpd state=startedansible-playbook 5.yaml

6.引入变量
(1)通过ansible命令参数-e传递
vim 6_1.yaml- hosts: mysqlremote_user: rootvars:- user:tasks:- name: add useruser: name={{user}}ansible-playbook 6_1.yaml -e "user=wangwu"
ansible mysql -a 'tail -1 /etc/passwd'

(2) 直接在yaml中定义,或者内置变量
vim 6_2.yaml- hosts: mysqlremote_user: rootvars:- user: lisitasks:- name: add useruser: name={{user}}ansible-playbook 6_2.yaml
ansible mysql -a 'tail -1 /etc/passwd'

vim 6_2.yaml- hosts: mysqlremote_user: roottasks:- name: copy filecopy: content="{{ansible_all_ipv4_addresses}}" dest=/opt/vars.txtansible-playbook 6_2.yaml
ansible mysql -a 'ls /opt'
ansible mysql -a 'cat /opt/vars.txt'

(3)引用主机清单内自定义变量
vim /etc/ansible/hosts[webserver]
192.168.227.101
[mysql]
192.168.227.102 user=wskvim 6_3.yaml- hosts: mysqlremote_user: roottasks:- name: add useruser: name={{user}}ansible-playbook 6_3.yaml
ansible mysql -a 'tail -1 /etc/passwd'

7.条件测试
如果需要根据变量、facts (setup) 或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用。在task后添加when子句即可使用条件测试: when子句支持 jinjia2 表达式或语法
(1)单条件判断
vim 7_1.yaml- hosts: mysqlremote_user: roottasks:- name: "shutdown CentOS"command: /sbin/shutdown -h nowwhen: ansible_distribution == "CentOS"ansible-playbook 7_1.yaml

(2)多条件判断
vim 7_2.yaml- hosts: mysqlremote_user: roottasks:- name: "shut down CentOS 7 systems"command: /sbin/shutdown -r nowwhen:- ansible_distribution == "CentOS"- ansible_distribution_major_version == "7"ansible-playbook 7_2.yaml
(3)组条件判断
vim 7_3.yml- hosts: mysqlremote_user: roottasks:- name: "shut down CentOS 6 and Debian 7 systems"command: /sbin/shutdown -t nowwhen: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "6") or (ansible_distribution == "Debian" and ansible_distribution_major_version == "7")ansible-playbook 7_3.yaml
(4)迭代
vim 7_4.yaml- hosts: webserverremote_user: roottasks:- name: installyum: name={{item}} state=latestwith_items:- httpd- rpcbind- nfs-utilsansible-playbook 7_4.yaml
ansible webserver -a 'rpm -q httpd'
ansible webserver -a 'rpm -q rpcbind'
ansible webserver -a 'rpm -q nfs-utils'


四.template
Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。
1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量
yum -y install httpd
rpm -qc httpd
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
Listen {{http_port}} #42行,修改
ServerName {{domain}} #95行,修改


2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
vim /etc/ansible/hosts[mysql]
192.168.227.101 port=80 domain=www.wsk1.com
192.168.227.102 port=80 domain=www.wsk2.com

3.编写 playbook
cd /opt
vim a.yaml- hosts: mysqlremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install serviceyum: name={{package}} state=latest- name: httpd.conftemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify: restart service- name: start serviceservice: name={{service}} state=started enabled=truehandlers:- name: restart serviceservice: name={{service}} state=restartedansible-playbook a.yaml
ansible mysql -a 'rpm -q httpd'
ansible mysql -a 'systemctl status httpd'
ansible mysql -a 'systemctl is-enabled httpd'




五.tags模块
可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。
playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。
vim b.yaml- hosts: mysqlremote_user: roottasks:- name: touch file onefile: path=/opt/1.txt state=touchtags:- file one- name: touch file twofile: path=/opt/2.txt state=touchtags:- file two- name: touch file threefile: path=/opt/3.txt state=touchtags:- file threeansible-playbook b.yaml --tags="file two"
ansible-playbook b.yaml --skip-tags="file one"


六.playbook使用roles
Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。
1.roles内各自目录含义
| files | 用来存放copy模块或script模块调用的文件 |
| templates | 用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件 |
| tasks | 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件 |
| handlers | 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作 |
| vars | 此目录应当包含一个main.yml文件,用于定义此角色用到的变量 |
| defailts | 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量 |
| meta | 此目录应当包含一个main.yml文件,用于定义此角色的特殊设及其依赖关系 |
2.在playbook中使用roles
#创建服务组件工作目录
mkdir -p /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir -p /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir -p /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} #创建yml空文件
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
#编写httpd模块
vim /etc/ansible/roles/httpd/tasks/main.yml - name: install httpdyum: pkg={{pkg}} state=latest#定义变量pkg软件包
vim /etc/ansible/roles/httpd/vars/main.yml pkg: httpd
#编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml - name: install mysqlyum: pkg={{pkg}} state=latestvim /etc/ansible/roles/mysql/vars/main.yml pkg: mariadb*
#编写php模块
vim /etc/ansible/roles/php/tasks/main.yml - name: install phpyum: pkg={{pkg}} state=latestvim /etc/ansible/roles/php/vars/main.yml pkg: php
#编写roles示例
vim /etc/ansible/site.yml
remote_user: root
roles:- httpd- mysql- php相关文章:
Ansible自动运维工具之playbook
目录 一.inventory主机清单 1.定义 2.变量 (1)主机变量 (2)组变量 (3)组嵌套 二.playbook基本内容 1.组成 (1)Tasks: 任务,即调用模块完成的某操作 ࿰…...
【启明智显技术分享】SSD201/SSD202D核心板UI界面开发全攻略:LVGL使用指南
提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…...
数据可视化(九):Pandas北京租房数据分析——房源特征绘图、箱线图、动态可视化等高级操作
Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…...
ADOP带你了解:跳线与交叉电缆有何不同?
如果您想将设备连接到互联网,您可能想知道要使用的正确电缆。跳线和交叉电缆都是类型的以太网电缆,可帮助连接计算机、调制解调器、路由器和交换机等设备。那么,跳线和交叉电缆有什么区别呢?让我们讨论这两种类型的电缆࿰…...
Django 和 Spring Boot
标题 Django (Python)Django提供的组件Django 的处理逻辑 Spring Boot (Java)Spring Boot 的特点Spring Boot 的处理逻辑 MVC设计模式模型(Model)视图(View)控制器(Controller)逻辑处理过程 Django 和 Spri…...
上位机图像处理和嵌入式模块部署(树莓派4b的替代品)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 实话实说,树莓派4b的产品力还是比较优秀的,价格还算适中。但是和国产卡片电脑比起来,则逊色不少。功能差不多的…...
Springboot整合 Spring Cloud Gateway
1.Gateway介绍 1.是spring cloud官方推出的响应式的API网关框架,旨在为微服务架构提供一种简单有效的API路由的管理方式,并基于Filter的方式提供网关的基本功能,例如:安全认证,监控,限流等等。 2.功能特征…...
Rust开发工具有哪些?
目录 一、JetBrains公司的RustRover编辑 二、微软公司的Visual Studio Code 三、Rust编译工具 一、JetBrains公司的RustRover RustRover是由JetBrains开发的一款专为Rust开发量身定制的新兴IDE,目前还处于早期访问阶段。它支持Rust、Cargo、TOML、Web和数据库等…...
20240514基于深度学习的弹性超材料色散关系预测与结构逆设计
论文:Dispersion relation prediction and structure inverse design of elastic metamaterials via deep learning DOI:https://doi.org/10.1016/j.mtphys.2022.100616 1、摘要 精心设计的超材料结构给予前所未有的性能,保证了各种各样的具…...
SAP:FI 财务凭证行项目文本前台修改
一、问题描述 财务凭证行项目文本点击修改,但是前台有的行可以修改,有的行是灰色的不能修改,如下图所示,这个文本信息有误,必须修改怎么办? 二、思路分析 有的行可以修改,有的行不能修改&#x…...
【linux系统学习教程 Day02】网络安全之Linux系统学习教程,管道,文件内容统计,过滤排序,去重,目录介绍
1-4 管道 管道符号: | ,可以将前面指令的执行结果,作为后面指令的操作内容。 ## 比如过滤ip地址 ip addr | tail -4 | head -1 解释一下就是先执行 ip addr ,得到的结果当做 tail -4 的输入,意思就是查看ip addr 结果的后四行内容…...
Spring Cloud LoadBalancer 4.1.2
LoadBalancer位于Spring Cloud Commons 模块 Spring Cloud 提供了自己的客户端负载均衡器抽象和实现。对于负载均衡机制,添加了 ReactiveLoadBalancer 接口,并为其提供了基于Round-Robin和Random的实现。为了让实例从反应式中进行选择,使用了…...
使用Xshell工具连接ubuntu-方便快捷
使用Xshell连接ubuntu 在命令行输入 “sudo apt-get install openssh-server”安装openssh-server 开启 ssh-server,在命令行输入 “service ssh start”,然后输入密码即可...
leetcode22 括号生成-组合型回溯
题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 输入:n 3 输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 解析 func generateParenthesis(n int) …...
mac定时任务、自启动任务
https://quail.ink/mynotes/p/mac-startup-configuration-detailed-explanation <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.d…...
重磅 | 国家标准《网络安全技术 零信任参考体系架构》正式发布
根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第6号),其中易安联参编的国家标准GB/T 43696-2024《网络安全技术 零信任参考体系架构》正式发布,并于2024年11月1日正式施行…...
【C++】可变参数模板简单介绍
前言 可变参数模板是C11中的新特性,它能够让我们创建可以接收可变参数的函数模板和类模板,相比C98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数是一个巨大的改进,通过系统系统推演数据的类型…...
RabbitMQ--死信队列
目录 一、死信队列介绍 1.死信 2.死信的来源 2.1 TTL 2.2 死信的来源 3.死信队列 4.死信队列的用途 二、死信队列的实现 1.导入依赖 pom.xml 2.application.properties 3.配置类 4.生产者 5.业务消费者(正常消费者) 6.死信队列消费者 一、…...
微信小程序毕业设计-基于Java后端的微信小程序源码150套(附源码+数据库+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 🧡今天给大家分享150的微信小程序毕业设计,后台用Java开发,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设…...
提前预知职业天赋!霍兰德职业兴趣测试API接口给你精准推荐
霍兰德职业倾向测验,它是美国著名职业指导专家J.霍兰德(HOLLAND)编制的,他的职业选择理论把职业分为六种不同类型,即现实型、研究型、艺术型、社会型、企业型、常规型。霍兰德认为,每个人都是这…...
ComfyUI Qwen镜像部署与使用:小白也能轻松玩转AI图像生成
ComfyUI Qwen镜像部署与使用:小白也能轻松玩转AI图像生成 1. 认识Qwen-Image-Edit-F2P模型 Qwen-Image-Edit-F2P是一个专注于人脸控制的AI图像生成模型,它能够将一张简单的人脸照片转化为精美的全身图像。这个模型基于ComfyUI平台部署,让普…...
ThinkPad X220 安装 Arch Linux 完美指南
1 镜像准备 1.1 镜像下载 安装镜像 iso 在开源镜像站(推荐)或者 archlinux 官方下载页面 下载。 国内常用的提供 archlinux 安装镜像的开源镜像站(选一个即可): 中国科学技术大学开源镜像站清华大学开源软件镜像站…...
解决Open-AutoGLM部署难题:ADB连接、模型加载、内存不足全攻略
解决Open-AutoGLM部署难题:ADB连接、模型加载、内存不足全攻略 1. 项目简介与核心价值 Open-AutoGLM是智谱AI开源的手机端智能助理框架,它能通过自然语言指令自动操控安卓设备。想象一下,只需说"打开小红书搜美食",AI…...
OpenClaw自动化创作:Qwen2.5-VL-7B实现图文内容批量生成
OpenClaw自动化创作:Qwen2.5-VL-7B实现图文内容批量生成 1. 为什么需要自动化内容生产线 作为一个自媒体运营者,我每天需要处理大量的内容创作任务:从选题策划、文案撰写、配图设计到排版发布,整个过程耗时耗力。最让我头疼的是…...
CRMEB小程序订阅消息配置避坑指南:从PHP环境搭建到消息同步全流程
CRMEB小程序订阅消息配置避坑指南:从PHP环境搭建到消息同步全流程 在当今的小程序生态中,订阅消息已经成为商家与用户互动的重要桥梁。CRMEB作为一款优秀的开源电商系统,与微信小程序订阅消息的集成却常常让开发者踩坑无数。本文将带你从零开…...
[具身智能-236]:OpenCV ROI:Region of Interest(感兴趣区域)
在 OpenCV 中,ROI 是 Region of Interest(感兴趣区域)的缩写。简单来说,ROI 就是从图像中切出来的“一块”。在处理图像时,我们往往不需要处理整张图片(比如处理人脸时不需要管背景里的树)&…...
解决网易云音乐加密NCM文件播放限制的完整实践指南
解决网易云音乐加密NCM文件播放限制的完整实践指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样的情况:从网易云音乐下载的…...
League Akari:基于LCU API的模块化游戏自动化框架深度解析
League Akari:基于LCU API的模块化游戏自动化框架深度解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在现代竞技游戏生态中&a…...
【花雕动手做】ESP32-S3 + MimiClaw 实战:通过飞书自然语言指令控制板载 WS2812 彩灯
【花雕动手做】嵌入式 AI Agent 实战:MimiClaw ESP32-S3 接入飞书,远程控制板载 RGB 全彩灯效 ——从源码修改到飞书指令,手把手打造一个能“听懂颜色话”的嵌入式 AI 智能体 一、引言:当“养龙虾”热潮遇到嵌入式 AI 2026 年开春…...
支持向量机避坑指南:当你的SVM分类效果差时该检查这5个参数
支持向量机避坑指南:当你的SVM分类效果差时该检查这5个参数 在机器学习实践中,支持向量机(SVM)因其出色的分类性能而广受欢迎,但许多开发者在调参过程中常常陷入困境。本文将深入剖析影响SVM性能的五大关键参数&#x…...
