如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- [训练SVM模型](#SVM_145)
- [预测结果](#_191)
- [误差计算](#_205)
- [保存SVM模型](#SVM_221)
- [从文件中加载SVM](#SVM_230)
+ [4. 示例代码](#4__239)
+ - [官方示例(python)](#python_240)
- [推理阶段(C++版本)](#C_358)
+ [5. 小结](#5__406)
1. 引言
opencv中集成了基于libsvm1实现的SVM接口,便于直接进行视觉分类任务。
对于数据处理和可视化需求来说,可以用python接口opencv的SVM更加直观方便。
训练完模型后,将SVM模型保存为xml,可以在实时性应用中通过C++接口调用参数文件,进行实时推断。
在非均衡样本的分类训练中,用opencv中SVM默认的train
函数,容易导致分类器偏向数量多的类别,这时可以采用trainAuto
函数进行平衡。
如果你对SVM的原理有一定了解,可以直接跳转第3、4小节。
2. 基本原理
SVM旨在找到一个划分超平面,使得划分后的分类结果是最鲁棒的,对未见过的样本泛化性最好2。
在样本空间中,划分超平面可以用这个方程进行描述:
w
T
x
b
=
0
\boldsymbol{w}^T\boldsymbol{x}+b=0
wTx+b=0,其中
w
=
(
w
1
;
w
2
;
.
.
.
;
w
d
)
\boldsymbol{w}=(w_1;w_2;…;w_d)
w=(w1;w2;…;wd)为法向量,决定超平面的方向,b为位移项,决定超平面与原点之间的距离。
对于线性可分的样本空间,需要找到具有最大间隔(maximum margin)的划分超平面,即找到能使下式最大化的参数
w
\boldsymbol{w}
w和b2:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
\min_{w,b}{\frac{1}{2}||\boldsymbol{w}||^2}
w,bmin21∣∣w∣∣2s.t.
y
i
(
w
T
x
i
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
m
y_i(\boldsymbol{w}^T\boldsymbol{x_i}+b)≥1,i=1,2,…,m
yi(wTxi+b)≥1,i=1,2,…,m
对于线性不可分的样本空间,可以将样本从原始空间映射到另一个高维特征空间,从而使样本在这个特征空间内线性可分。由于特征空间的维数可能很高,难以计算,所以通过引入核函数,可以将高维特征空间中的内积(dot product)转化为低维特征空间中的通过核函数计算的结果。
常用核函数2:
为了减少过拟合,引入软间隔(soft margin)概念,允许支持向量机在一些样本上出错:
y
i
(
w
T
x
i
b
)
≥
1
y_i(\boldsymbol{w}^T\boldsymbol{x_i}+b)≥1
yi(wTxi+b)≥1
用参数C来约束分类出错的样本,松弛变量
ξ
i
ξ_i
ξi表示训练样本距离对应的正确决策边界的距离,对于分类正确的样本距离即为03,所以实际累加的是出错样本的距离。
优化问题调整为:
m
i
n
w
,
b
0
∣
∣
w
∣
∣
2
C
∑
i
ξ
i
min_{\boldsymbol{w},b_0}{||\boldsymbol{w}||^2+C\sum_i{ξ_i}}
minw,b0∣∣w∣∣2+Ci∑ξi
s.t.
y
i
(
w
T
x
i
b
0
)
≥
1
−
ξ
i
,
且
ξ
i
≥
0
∀
i
y_i(\boldsymbol{w}^T\boldsymbol{x_i}+b_0)≥1-ξ_i,且ξ_i≥0 ∀i
yi(wTxi+b0)≥1−ξi,且ξi≥0∀i
3. 函数解析
SVM类在opencv中的继承关系如图所示4:
SVM继承自StatModel和Algorithm类。
在opencv中使用SVM的一般流程如下:
#mermaid-svg-rzGo5PBLAQjMOTen .label{font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family);fill:#333;color:#333}#mermaid-svg-rzGo5PBLAQjMOTen .label text{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .node rect,#mermaid-svg-rzGo5PBLAQjMOTen .node circle,#mermaid-svg-rzGo5PBLAQjMOTen .node ellipse,#mermaid-svg-rzGo5PBLAQjMOTen .node polygon,#mermaid-svg-rzGo5PBLAQjMOTen .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-rzGo5PBLAQjMOTen .node .label{text-align:center;fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .node.clickable{cursor:pointer}#mermaid-svg-rzGo5PBLAQjMOTen .arrowheadPath{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-rzGo5PBLAQjMOTen .flowchart-link{stroke:#333;fill:none}#mermaid-svg-rzGo5PBLAQjMOTen .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-rzGo5PBLAQjMOTen .edgeLabel rect{opacity:0.9}#mermaid-svg-rzGo5PBLAQjMOTen .edgeLabel span{color:#333}#mermaid-svg-rzGo5PBLAQjMOTen .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-rzGo5PBLAQjMOTen .cluster text{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-rzGo5PBLAQjMOTen .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-rzGo5PBLAQjMOTen text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-rzGo5PBLAQjMOTen .actor-line{stroke:grey}#mermaid-svg-rzGo5PBLAQjMOTen .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-rzGo5PBLAQjMOTen .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-rzGo5PBLAQjMOTen #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-rzGo5PBLAQjMOTen .sequenceNumber{fill:#fff}#mermaid-svg-rzGo5PBLAQjMOTen #sequencenumber{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen #crosshead path{fill:#333;stroke:#333}#mermaid-svg-rzGo5PBLAQjMOTen .messageText{fill:#333;stroke:#333}#mermaid-svg-rzGo5PBLAQjMOTen .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-rzGo5PBLAQjMOTen .labelText,#mermaid-svg-rzGo5PBLAQjMOTen .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-rzGo5PBLAQjMOTen .loopText,#mermaid-svg-rzGo5PBLAQjMOTen .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-rzGo5PBLAQjMOTen .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-rzGo5PBLAQjMOTen .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-rzGo5PBLAQjMOTen .noteText,#mermaid-svg-rzGo5PBLAQjMOTen .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-rzGo5PBLAQjMOTen .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-rzGo5PBLAQjMOTen .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-rzGo5PBLAQjMOTen .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-rzGo5PBLAQjMOTen .mermaid-main-font{font-family:“trebuchet ms”, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .section{stroke:none;opacity:0.2}#mermaid-svg-rzGo5PBLAQjMOTen .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-rzGo5PBLAQjMOTen .section2{fill:#fff400}#mermaid-svg-rzGo5PBLAQjMOTen .section1,#mermaid-svg-rzGo5PBLAQjMOTen .section3{fill:#fff;opacity:0.2}#mermaid-svg-rzGo5PBLAQjMOTen .sectionTitle0{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .sectionTitle1{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .sectionTitle2{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .sectionTitle3{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-rzGo5PBLAQjMOTen .grid .tick text{font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .grid path{stroke-width:0}#mermaid-svg-rzGo5PBLAQjMOTen .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-rzGo5PBLAQjMOTen .task{stroke-width:2}#mermaid-svg-rzGo5PBLAQjMOTen .taskText{text-anchor:middle;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .taskText:not([font-size]){font-size:11px}#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-rzGo5PBLAQjMOTen .task.clickable{cursor:pointer}#mermaid-svg-rzGo5PBLAQjMOTen .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-rzGo5PBLAQjMOTen .taskText0,#mermaid-svg-rzGo5PBLAQjMOTen .taskText1,#mermaid-svg-rzGo5PBLAQjMOTen .taskText2,#mermaid-svg-rzGo5PBLAQjMOTen .taskText3{fill:#fff}#mermaid-svg-rzGo5PBLAQjMOTen .task0,#mermaid-svg-rzGo5PBLAQjMOTen .task1,#mermaid-svg-rzGo5PBLAQjMOTen .task2,#mermaid-svg-rzGo5PBLAQjMOTen .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutside0,#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutside2{fill:#000}#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutside1,#mermaid-svg-rzGo5PBLAQjMOTen .taskTextOutside3{fill:#000}#mermaid-svg-rzGo5PBLAQjMOTen .active0,#mermaid-svg-rzGo5PBLAQjMOTen .active1,#mermaid-svg-rzGo5PBLAQjMOTen .active2,#mermaid-svg-rzGo5PBLAQjMOTen .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-rzGo5PBLAQjMOTen .activeText0,#mermaid-svg-rzGo5PBLAQjMOTen .activeText1,#mermaid-svg-rzGo5PBLAQjMOTen .activeText2,#mermaid-svg-rzGo5PBLAQjMOTen .activeText3{fill:#000 !important}#mermaid-svg-rzGo5PBLAQjMOTen .done0,#mermaid-svg-rzGo5PBLAQjMOTen .done1,#mermaid-svg-rzGo5PBLAQjMOTen .done2,#mermaid-svg-rzGo5PBLAQjMOTen .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-rzGo5PBLAQjMOTen .doneText0,#mermaid-svg-rzGo5PBLAQjMOTen .doneText1,#mermaid-svg-rzGo5PBLAQjMOTen .doneText2,#mermaid-svg-rzGo5PBLAQjMOTen .doneText3{fill:#000 !important}#mermaid-svg-rzGo5PBLAQjMOTen .crit0,#mermaid-svg-rzGo5PBLAQjMOTen .crit1,#mermaid-svg-rzGo5PBLAQjMOTen .crit2,#mermaid-svg-rzGo5PBLAQjMOTen .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-rzGo5PBLAQjMOTen .activeCrit0,#mermaid-svg-rzGo5PBLAQjMOTen .activeCrit1,#mermaid-svg-rzGo5PBLAQjMOTen .activeCrit2,#mermaid-svg-rzGo5PBLAQjMOTen .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-rzGo5PBLAQjMOTen .doneCrit0,#mermaid-svg-rzGo5PBLAQjMOTen .doneCrit1,#mermaid-svg-rzGo5PBLAQjMOTen .doneCrit2,#mermaid-svg-rzGo5PBLAQjMOTen .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-rzGo5PBLAQjMOTen .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-rzGo5PBLAQjMOTen .milestoneText{font-style:italic}#mermaid-svg-rzGo5PBLAQjMOTen .doneCritText0,#mermaid-svg-rzGo5PBLAQjMOTen .doneCritText1,#mermaid-svg-rzGo5PBLAQjMOTen .doneCritText2,#mermaid-svg-rzGo5PBLAQjMOTen .doneCritText3{fill:#000 !important}#mermaid-svg-rzGo5PBLAQjMOTen .activeCritText0,#mermaid-svg-rzGo5PBLAQjMOTen .activeCritText1,#mermaid-svg-rzGo5PBLAQjMOTen .activeCritText2,#mermaid-svg-rzGo5PBLAQjMOTen .activeCritText3{fill:#000 !important}#mermaid-svg-rzGo5PBLAQjMOTen .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen g.classGroup text{fill:#9370db;stroke:none;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family);font-size:10px}#mermaid-svg-rzGo5PBLAQjMOTen g.classGroup text .title{font-weight:bolder}#mermaid-svg-rzGo5PBLAQjMOTen g.clickable{cursor:pointer}#mermaid-svg-rzGo5PBLAQjMOTen g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-rzGo5PBLAQjMOTen g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-rzGo5PBLAQjMOTen .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-rzGo5PBLAQjMOTen .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-rzGo5PBLAQjMOTen .dashed-line{stroke-dasharray:3}#mermaid-svg-rzGo5PBLAQjMOTen #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen .commit-id,#mermaid-svg-rzGo5PBLAQjMOTen .commit-msg,#mermaid-svg-rzGo5PBLAQjMOTen .branch-label{fill:lightgrey;color:lightgrey;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .slice{font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-rzGo5PBLAQjMOTen g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-rzGo5PBLAQjMOTen g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-rzGo5PBLAQjMOTen g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-rzGo5PBLAQjMOTen .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-rzGo5PBLAQjMOTen .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-rzGo5PBLAQjMOTen .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-rzGo5PBLAQjMOTen .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-rzGo5PBLAQjMOTen .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-rzGo5PBLAQjMOTen .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-rzGo5PBLAQjMOTen .edgeLabel text{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:‘trebuchet ms’, verdana, arial;font-family:var(–mermaid-font-family)}#mermaid-svg-rzGo5PBLAQjMOTen .node circle.state-start{fill:black;stroke:black}#mermaid-svg-rzGo5PBLAQjMOTen .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-rzGo5PBLAQjMOTen #statediagram-barbEnd{fill:#9370db}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-state .divider{stroke:#9370db}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-rzGo5PBLAQjMOTen .note-edge{stroke-dasharray:5}#mermaid-svg-rzGo5PBLAQjMOTen .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{–mermaid-font-family: ‘“trebuchet ms”, verdana, arial’;–mermaid-font-family: “Comic Sans MS”, “Comic Sans”, cursive}#mermaid-svg-rzGo5PBLAQjMOTen .error-icon{fill:#522}#mermaid-svg-rzGo5PBLAQjMOTen .error-text{fill:#522;stroke:#522}#mermaid-svg-rzGo5PBLAQjMOTen .edge-thickness-normal{stroke-width:2px}#mermaid-svg-rzGo5PBLAQjMOTen .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-rzGo5PBLAQjMOTen .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-rzGo5PBLAQjMOTen .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-rzGo5PBLAQjMOTen .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-rzGo5PBLAQjMOTen .marker{fill:#333}#mermaid-svg-rzGo5PBLAQjMOTen .marker.cross{stroke:#333}
:root { --mermaid-font-family: “trebuchet ms”, verdana, arial;}
#mermaid-svg-rzGo5PBLAQjMOTen {
color: rgba(0, 0, 0, 0.75);
font: ;
}
训练
推理
开始
创建SVM模型
加载SVM模型
配置参数
加载训练数据
模型训练
保存模型
输入数据进行预测
创建模型
C++:
static Ptr<SVM> cv::ml::SVM::create()
Python:
cv.ml.SVM_create() -> retval
设置模型类型
C++:
enum Types {
C_SVC =100,//C-支持向量分类。n级分类(n≥ 2) 允许使用异常值的惩罚乘数 C 不完全地分离类。
NU_SVC =101,//ν-支持向量分类。n级分类,可能有不完美的分离。参数ν用于代替C,参数ν在0-1范围内,值越大,决策边界越平滑。
ONE_CLASS =102,//分布估计,所有的训练数据都来自同一个类,SVM 构建了一个边界,将类与特征空间的其余部分分开。
EPS_SVR =103,//ε-支持向量回归。来自训练集的特征向量和拟合超平面之间的距离必须小于p。对于异常值,使用惩罚乘数 C。
NU_SVR =104 // ν-支持向量回归。 ν用于代替 p。
}
virtual void cv::ml::SVM::setType(int val)
Python:
cv.ml_SVM.setType(val) ->None
设置参数C
根据"2.基本原理"中对参数C的介绍,我们应该如何设置参数C?
- C值较大时:误分类错误较少,但余量较小。这种情况下,侧重于寻找具有很少的误分类错误的超平面。
- C值较小时:具有更大余量和更多分类错误。在这种情况下,更侧重于寻找具有大余量的超平面。
C++:
//设置参数C
virtual void cv::ml::SVM::setC(double val)
python:
cv.ml_SVM.setC(val) -> None
设置核函数
C++:
enum KernelTypes {
CUSTOM =-1,//由SVM::getKernelType返回,默认是RBF
LINEAR =0,//线性内核,速度最快
POLY =1,//多项式核
RBF =2,//径向基函数(RBF),大多数情况下是个不错的选择
SIGMOID =3,//sigmoid核
CHI2 =4,//Chi2核,类似于RBF核
INTER =5//直方图交叉核,速度较快
}
virtual void cv::ml::SVM::setKernel(int kernelType)
python:
cv.ml_SVM.setKernel(kernelType) -> None
设置迭代算法的终止标准
C++:
virtual void cv::ml::SVM::setTermCriteria(const cv::TermCriteria &val)
// cv::TermCriteria
cv::TermCriteria::TermCriteria (int type,int maxCount,double epsilon)
// Type
enum cv::TermCriteria::Type {
COUNT =1,
MAX_ITER =COUNT,//最大迭代次数
EPS =2 //迭代算法停止时所需的精度或参数变化
}
### 最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
#### 👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

#### 👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

#### 👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

#### 👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

#### 👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**