SVM(核支持向量机)是可以推广到更复杂模型的扩展,可以同时用于分类(SVC)和回归(SVR)。

线性模型与非线性特征

当线性模型无法将低维空间中的类别分割,可以增添更多特征(输入特征的交互项或多项式),扩展为高维空间。x/y->x/y/z(y^2)

import matplotlib.pyplot as plt
import mglearn
from sklearn.datasets import make_blobs
from sklearn.svm import LinearSVCx, y = make_blobs(centers=4, random_state=8) # 生成数据集和相应的标签
y = y % 2# SVM模型
linear_svm = LinearSVC().fit(x, y)mglearn.plots.plot_2d_separator(linear_svm, x)
mglearn.discrete_scatter(x[:,0], x[:,1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
plt.legend(['Class 0', 'Class 1'], loc=0)

make_blobs方法:sklearn.datasets.make_blobs(n_samples=100,n_features=2,centers=3, cluster_std=1.0,center_box=(-10.0,10.0),shuffle=True,random_state=None)
make_blobs函数是为聚类产生数据集,产生一个数据集和相应的标签

  • n_samples:表示数据样本点个数,默认值100
  • n_features:是每个样本的特征(或属性)数,也表示数据的维度,默认值是2
  • centers:表示类别数(标签的种类数),默认值3
  • cluster_std表示每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0],浮点数或者浮点数序列,默认值1.0
  • center_box:中心确定之后的数据边界,默认值(-10.0, 10.0)
  • shuffle :将数据进行洗乱,默认值是True
  • random_state:官网解释是随机生成器的种子,可以固定生成的数据,给定数之后,每次生成的数据集就是固定的。若不给定值,则由于随机性将导致每次运行程序所获得的的结果可能有所不同。

make_blobs函数及相应参数简介

扩展特征

import numpy as np
from mpl_toolkits.mplot3d import Axes3D, axes3d# 添加新特征(第二个特征的平方)
x_new = np.hstack([x, x[:,1:]**2]) # 水平方向堆叠数组
linear_svm_3d = LinearSVC().fit(x_new, y)
coef, intercept = linear_svm_3d.coef_.ravel(), linear_svm_3d.intercept_# 3D可视化
figure = plt.figure()
ax = Axes3D(figure, elev=-152, azim=-26)# 显示线性决策边界,三维空间线性模型是平面
xx = np.linspace(x_new[:,0].min()-2, x_new[:,0].max()+2.50) # 产生线性矢量
yy = np.linspace(x_new[:,1].min()-2, x_new[:,1].max()+2.50)
xx, yy = np.meshgrid(xx, yy) # 转换成矩阵
zz = (coef[0]*xx + coef[1]*yy + intercept) / -coef[2]
ax.plot_surface(xx, yy, zz, rstride=8, cstride=8, alpha=0.3)# 先y==0,y==1
mask = y==0
ax.scatter(x_new[mask, 0], x_new[mask, 1], x_new[mask, 2], c='b', cmap=mglearn.cm2, s=60)
ax.scatter(x_new[~mask, 0], x_new[~mask, 1], x_new[~mask, 2], c='r', marker='^', cmap=mglearn.cm2, s=60)
ax.set_xlabel("feature 0")
ax.set_ylabel("feature 1")
ax.set_zlabel("feature1^2")

hstack(tup) 函数水平(按列顺序)把数组给堆叠起来,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。
linspace(x1,x2,N)函数:linspace是Matlab中的均分计算指令,用于产生x1,x2之间的N点行线性的矢量。其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。
[X,Y]=meshgrid(x,y)函数将向量x和y定义的区域转换成矩阵X和Y,其中矩阵X的行向量是向量x的简单复制,而矩阵Y的列向量是向量y的简单复制

Numpy中stack(),hstack(),vstack()函数
Numpy中Meshgrid函数


如果看成二维平面中,这个SVM模型像个椭圆。

核技巧

向数据中添加非线性的特征的技巧就是核技巧,它直接计算扩展特征表示数据点之间的距离(内积),而不用实际对扩展进行计算。

SVM将数据映射到高维空间中两种常用方法:

  • 多项式核(就像上面那样在一定阶数内计算)
  • (RBF)径向基函数核/高斯核

预测新数据点

位于类别之间边界上的点叫作支持向量
对新样本点进行预测,分类决策取决于它与每个支持向量之间的距离(由高斯核给出)以及在训练过程中学到的支持向量重要性(保存在SVC中的dual_coef_属性

SVM参数

gamma参数:控制高斯核的宽度。gamma越小,说明高斯核半径较大,默认gamma=1/n_features。
C参数:正则化参数,限制每个点的重要性(dual_coef_)。C很小,说明模型受限(几乎线性),增大后,决策边间发生弯曲。默认C=1。
gamma和C控制的都是模型复杂度,较大的值对应更为复杂的模型,两个值相互关联,需要同时调节。

在cancer数据集应用RBF核

from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_splitcancer = load_breast_cancer()
x_train, x_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)svc = SVC().fit(x_train, y_train)print(svc.score(x_train, y_train))
print(svc.score(x_test, y_test))

有点小问题,我这次测试的拟合度很好,没有样例的过拟合,都不需要预处理。

优缺点

优:在低维数据和高维数据上表现均良好。
缺:对样本个数缩放表现不好(数据量大消耗时间和内存);预处理和调参要仔细;模型很难解释

【机器学习】(十)核支持向量机SVM:make_blobs方法,hstack() 函数相关推荐

  1. 用最通俗的语言讲机器学习之核支持向量机(SVM)

    额,对于这个东西我不想扯得太复杂,我也不是什么计算机科学家,我学这个东西包括学机器学习的目的一直都很简单直接粗暴单纯,就是三个字:打建模!是的,我就是个俗人,所以写的这篇文章非俗人是看不懂的,如果有想 ...

  2. 机器学习算法の03 支持向量机SVM

    机器学习算法の03 支持向量机SVM SVM的基本概念 线性可分支持向量机 非线性支持向量机和核函数 线性支持向量机与松弛变量 LR与SVM的区别与联系 SVM的基本概念 基本概念: 支持向量机(su ...

  3. 机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)

    文章目录 系列文章 支持向量机SVM算法 1 SVM算法简介 1.1 引入 1.2 算法定义 2 SVM算法原理 2.1 线性可分支持向量机 2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建 ...

  4. svm多分类_人工智能科普|机器学习重点知识——支持向量机SVM

    作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...

  5. 机器学习算法之支持向量机 SVM

    距离知识 点到直线/平面的距离公式: 1.假定点p(x0,y0),平面方程为f(x,y)=Ax+By+C,那么点p到平面f(x)的距离为: 2.从三维空间扩展到多维空间中,如果存在一个超平面f(X)= ...

  6. 最小二乘法支持向量机一般用在什么场合_人工智能科普|机器学习重点知识——支持向量机SVM...

    作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...

  7. python机器学习库sklearn——支持向量机svm

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 支持向量机svm的相关的知 ...

  8. 基于贝叶斯优化混合核支持向量机的回归方法

    目前人工智能和深度学习越趋普及,构建一个回归或者分类模型十分容易,但是想要得到更好的精度却较为困难,其主要原因是模型超参数的选择.那么要想模型效果好,手动调参少不了,机器学习算法如SVM就有gamma ...

  9. 机器学习模型3——支持向量机SVM

    前置知识 拉格朗日乘子法 支持向量机SVM SVM:SVM全称是supported vector machine(⽀持向量机),即寻找到⼀个超平⾯使样本分成两类,并且间隔最⼤. SVM能够执⾏线性或⾮ ...

  10. 机器学习-分类之支持向量机(SVM)原理及实战

    支持向量机(SVM) 简介 支持向量机(Support Vector Machine,SVM),是常见的一种判别方法.在机器学习领域,是一个监督学习模型,通常用来进行模式识别.分类及回归分析.与其他算 ...

最新文章

  1. Fire Workflow FAQ
  2. JVM调优系列:(二)JVM运行时数据区域
  3. SpringBoot学习之路:06.Spring Boot替换默认的Jackson
  4. 【Python】Python3.7.3 - 闭包Closure技术
  5. GLib-CRITICAL : g_variant_get_uint32: assertion ‘g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)
  6. In App Purchases(IAP 应用程序內购买): 完全攻略
  7. 关于svn汉化包安装无效的解决办法
  8. pdf转cad转换器转换快速简单方法
  9. 万字超详细图文教程:联想G510加装内存条、固态,机械移至光驱位
  10. mysql联合查询 课程表_oracle 学生表,课程表,选课表. 三表联合查询
  11. 神经网络模型的实际案例,神经网络模型应用实例
  12. matlab计算单模光纤耦合效率的积分,用于光纤阵列耦合的微透镜阵列的设计和耦合效率的分析...
  13. 虚拟机去虚拟化教程,过游戏检测,不全你打我
  14. latex公式文字划掉的效果
  15. python中qt有哪些控件_PyQt5的基本控件整理
  16. UNR#2 梦中的题面 HDU6056
  17. 《TCP/IP协议族》:数据链路层三
  18. postcss的基础知识
  19. 基于SSM社区养老院管理系统
  20. 2021年电工(初级)及电工(初级)证考试

热门文章

  1. 仿射变换(Affine Transformation)原理及应用(1)
  2. 木子-后端-根据出生日期算出年龄
  3. 51单片机--外部中断
  4. urchin的安装及使用
  5. cout 声明与定义
  6. 有限域(2)——理想和商环
  7. Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2
  8. pcf8591简明教程 及 51单片机最大只能读到127问题解决
  9. selenium+python爬取京东评论最多的计算机配置信息
  10. 这种减肥方式是极度有害的,你还深陷其中吗