1、线性SVM

SVM特别适用于中小型复杂数据集的分类。

SVM对特征的缩放非常敏感

SVM的基本思想可以用一些图来说明。图51所示的数据集来自第4章末尾引用的鸢尾花数据集的一部分。两个类可以轻松地被一条直线(它们是线性可分离的)分开。左图显示了三种可能的线性分类器的决策边界。其中虚线所代表的模型表现非常糟糕,甚至都无法正确实现分类。其余两个模型在这个训练集上表现堪称完美,但是它们的决策边界与实例过于接近,导致在面对新实例时,表现可能不会太好。相比之下,右图中的实线代表SVM分类器的决策边界,这条线不仅分离了两个类,并且尽可能远离了最近的训练实例。你可以将SVM分类器视为在类之间拟合可能的最宽的街道(平行的虚线所示)。因此这也叫作大间隔分类。

请注意,在“街道以外”的地方增加更多训练实例不会对决策边界产生影响,也就是说它完全由位于街道边缘的实例所决定(或者称之为“支持”)。这些实例被称为支持向量(在图51中已圈出)。

import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVCiris = datasets.load_iris()
X = iris['data'][:,(2,3)]#长度与宽度
y = (iris['target']= =2).astype(np.float64)svm_clf = Pipeline([('scaler', StandardScaler()),('linear_svc', LinearSVC(C=1, loss='hinge'))
])
svm_clf.fit(X, y)svm_clf.predict([[5.5,1.7]])
array([1.])

2、非线性SVM分类:多项式

虽然在许多情况下,线性SVM分类器是有效的,并且通常出人意料的好,但是,有很多数据集远不是线性可分离的。处理非线性数据集的方法之一是添加更多特征,比如多项式特征。某些情况下,这可能导致数据集变得线性可分离。假设一个简单的数据集,只有一个特征x1,数据集线性不可分。但是如果添加第二个特征x2=(x1)^2,生成的2D数据集则完全线性可分离。

from sklearn.datasets import make_moons
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeaturespolynomial_svm_clf = Pipeline([("poly_features", PolynomialFeatures(degree=3)),("scaler", StandardScaler()),("svm_clf", LinearSVC(C=10, loss="hinge", random_state=42))])polynomial_svm_clf.fit(X, y)
Pipeline(steps=[('poly_features', PolynomialFeatures(degree=3)),('scaler', StandardScaler()),('svm_clf', LinearSVC(C=10, loss='hinge', random_state=42))])

添加多项式特征实现起来非常简单,并且对所有的机器学习算法(不只是SVM)都非常有效。但问题是,如果多项式太低阶,则处理不了非常复杂的数据集。而高阶则会创造出大量的特征,导致模型变得太慢。幸运的是,使用SVM时,有一个魔术般的数学技巧可以应用,这就是核技巧(稍后解释)。它产生的结果就跟添加了许多多项式特征(甚至是非常高阶的多项式特征)一样,但实际上并不需要真的添加。因为实际没有添加任何特征,所以也就不存在数量爆炸的组合特征了。这个技巧由SVC类来实现,我们看看在卫星数据集上的测试:

from sklearn.svm import SVCpoly_kernel_svm_clf = Pipeline([("scaler", StandardScaler()),("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5))])
poly_kernel_svm_clf.fit(X, y)
Pipeline(steps=[('scaler', StandardScaler()),('svm_clf', SVC(C=5, coef0=1, kernel='poly'))])

非线性SVM分类:高斯核

与多项式特征方法一样,相似特征法也可以用任意机器学习算法,但是要计算出所有附加特征,其计算代价可能非常昂贵,尤其是对大型训练集来说。然而,核技巧再一次施展了它的SVM魔术:它能够产生的结果就跟添加了许多相似特征一样(但实际上也并不需要添加)。我们来使用SVC类试试高斯RBF核:

rbf_kernel_svm_clf = Pipeline([("scaler", StandardScaler()),("svm_clf", SVC(kernel="rbf", gamma=5, C=0.001))])
rbf_kernel_svm_clf.fit(X, y)
Pipeline(steps=[('scaler', StandardScaler()),('svm_clf', SVC(C=0.001, gamma=5))])

sklearn综合示例8:SVM相关推荐

  1. sklearn综合示例7:集成学习与随机森林

    假设你创建了一个包含1000个分类器的集成,每个分类器都只有51%的概率是正确的(几乎不比随机猜测强多少).如果你以大多数投票的类别作为预测结果,可以期待的准确率高达75%.但是,这基于的前提是所有的 ...

  2. sklearn综合示例3:逻辑回归

    文章目录 API 模型参数 penalty dual tol C fit_intercept class_weight random_state solver max_iter verbose war ...

  3. sklearn综合示例9:分类问题的onehot与预测阈值调整

    本文介绍了: 如何将多个标签做onehot,比如说总共有1000个标签,用户带了其中100个标签,那就是一个1000维的feautre,其中100维=1,其余900维=0. 调整分类算法的分类阈值,比 ...

  4. sklearn综合示例5:多分类分类器

    二元分类器在两个类中区分,而多类分类器(也称为多项分类器)可以区分两个以上的类.有一些算法(如随机森林分类器或朴素贝叶斯分类器)可以直接处理多个类.也有一些严格的二元分类器(如支持向量机分类器或线性分 ...

  5. sklearn综合示例2:决策树

    scikit-learn 是适用于数据处理和机器学习处理非常强大的库.提供数据降维.回归.聚类.分类等功能,是机器学习从业者的必备库之一. 示例一 案例:鸢尾属植物数据集(iris)分类. 鸢尾属植物 ...

  6. make--变量与函数的综合示例 自动生成依赖关系

    一.变量与函数的示例 示例的要求 1.自动生成target文件夹存放可执行文件 2.自动生成objs文件夹存放编译生成的目标文件 3.支持调试版本的编译选项 4.考虑代码的扩展性 完成该示例所需的 1 ...

  7. C结构体工具DirectStruct(综合示例二)

    2019独角兽企业重金招聘Python工程师标准>>> C结构体工具DirectStruct(综合示例二) 1.编写定义文件,用工具dsc处理之,自动生成XML转换代码和ESQL代码 ...

  8. QT综合示例:QT串口通信

    QT综合示例:QT串口通信 0.界面: 1.代码: 如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了. 0.界面: 1.代码: 1).pro 添加: QT ...

  9. QT+Halcon综合示例:clip回形针2D位姿检测

    QT+Halcon综合示例(一):clip回形针2D位姿检测 0.halcon源码: 1.Qt代码: 2.运行结果: 下载:clip回形针2D位姿检测 0.halcon源码: * clip.hdev: ...

最新文章

  1. Python学习之While--break
  2. onpropertychange事件
  3. 浅谈C++设计模式之工厂方法(Factory Method)
  4. 技术干货 | 深度解构 Android 应用面临紧急发版时的救星方案:mPaaS 热修复——DexPatch
  5. 局域网聊天老大——飞鸽传书
  6. 2013暑假江西联合训练赛 -- by jxust_acm 解题报告
  7. 【mysql】使用脚本对mysql状态进行监控
  8. Reporting Service RDLC 数据换行解决方案
  9. 第五十二篇 仿真电路简单说明multisim12 函数发生器 示波器
  10. 软件需求说明书(GB856T——88)
  11. 浅层砂过滤器 全自动浅层介质过滤系统
  12. matlab 合成t检验,[zz]用MATLAB做T检验(ttest)
  13. Windows平台下 C++注册表项重命名实现
  14. 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(C++)(贪心法)
  15. 如何将腾讯QLV格式转换成MP4普通视频
  16. 猫,路由器,宽带(光纤,ADSL),带宽的区别和联系
  17. 随机函数的rand、srand用法
  18. 抢占Z世代心智 汽车行业不可错过的B站
  19. hihoCoder #1902 字符替换
  20. PMP试题 | 每日一练,快速提分 8.2

热门文章

  1. 社交搜索Graph Search技术解析
  2. 【速看,双100%】剑指 Offer 14- I. 剪绳子 I
  3. 1034 Head of a Gang (30 分) One way that the police finds the head of a gang is to check people‘s pho
  4. 【最新合集】编译原理习题(含答案)_11-14中间代码生成_MOOC慕课 哈工大陈鄞
  5. 【界面无法显示】getStorageInfoSync和getStorageSync的区别
  6. 安装mamached数据库
  7. 集群(四)——haproxy日志
  8. 网页中弹出模式对话框
  9. Android 判断应用 第一次启动
  10. 广东计算机应用基础试题及答案2019,2019年计算机应用基础试题库及答案.pdf