转载自博客园:https://www.cnblogs.com/volcao/p/9465214.html

SVM(核函数、高斯核函数RBF)

一、核函数(Kernel Function)

 1)格式

  • K(x, y):表示样本 x 和 y,添加多项式特征得到新的样本 x'、y',K(x, y) 就是返回新的样本经过计算得到的值;
  • 在 SVM 类型的算法 SVC() 中,K(x, y) 返回点乘:x' . y' 得到的值;

 2)多项式核函数

  • 业务问题:怎么分类非线性可分的样本的分类?
  • 内部实现:

  1. 对传入的样本数据点添加多项式项;
  2. 新的样本数据点进行点乘,返回点乘结果;
  • 多项式特征的基本原理:依靠升维使得原本线性不可分的数据线性可分;
  • 升维的意义:使得原本线性不可分的数据线性可分;
  • 例:

  1. 一维特征的样本,两种类型,分布如图,线性不可分:
  2. 为样本添加一个特征:x2 ,使得样本在二维平面内分布,此时样本在 x 轴升的分布位置不变;如图,可以线性可分:

 3)优点 / 特点

  •  不需要每次都具体计算出原始样本点映射的新的无穷维度的样本点,直接使用映射后的新的样本点的点乘计算公式即可;
  • 减少计算量
  • 减少存储空间
  1. 一般将原始样本变形,通常是将低维的样本数据变为高维数据,存储高维数据花费较多的存储空间;使用核函数,不用考虑原来样本改变后的样子,也不用存储变化后的结果,只需要直接使用变化的结果进行运算并返回运算结果即可;
  • 核函数的方法和思路不是 SVM 算法特有,只要可以减少计算量和存储空间,都可以设计核函数方便运算;
  • 对于比较传统的常用的机器学习算法,核函数这种技巧更多的在 SVM 算法中使用;

 4)SVM 中的核函数

  • svm 类中的 SVC() 算法中包含两种核函数:
  1. SVC(kernel = 'ploy'):表示算法使用多项式核函数;
  2. SVC(kernel = 'rbf'):表示算法使用高斯核函数;
  • SVM 算法的本质就是求解目标函数的最优化问题;
  • 求解最优化问题时,将数学模型变形:

 5)多项式核函数

  • 格式:

    from sklearn.svm import SVCsvc = SVC(kernel = 'ploy')
  • 思路:设计一个函数( K(xi, xj) ),传入原始样本(x(i) 、 x(j)),返回添加了多项式特征后的新样本的计算结果(x'(i) . x'(j));
  • 内部过程:先对 xi 、xj 添加多项式,得到:x'(i) 、 x'(j) ,再进行运算x'(i) . x'(j) ;
  1. x(i) 添加多项式特征后:x'(i) ;
  2. x(j) 添加多项式特征后:x'(j) ;
  3. x(i) . x(j) 转化为:x'(i) . x'(j) ;
  • 其实不使用核函数也能达到同样的目的,这里核函数相当于一个技巧,更方便运算;

二、高斯核函数(RBF)

  • 业务问题:怎么分类非线性可分的样本的分类?

 1)思想

  • 业务的目的是样本分类,采用的方法:按一定规律统一改变样本的特征数据得到新的样本,新的样本按新的特征数据能更好的分类,由于新的样本的特征数据与原始样本的特征数据呈一定规律的对应关系,因此根据新的样本的分布及分类情况,得出原始样本的分类情况。
  1. 应该是试验反馈,将样本的特征数据按一定规律统一改变后,同类样本更好的凝聚在了一起;
  • 高斯核和多项式核干的事情截然不同的,如果对于样本数量少,特征多的数据集,高斯核相当于对样本降维;
  • 高斯核的任务:找到更有利分类任务的新的空间。
  • 方法:类似  的映射。
  • 高斯核本质是在衡量样本和样本之间的“相似度”,在一个刻画“相似度”的空间中,让同类样本更好的聚在一起,进而线性可分。
  • 疑问
  • “衡量”的手段 ,经过这种映射之后,为什么同类样本能更好的分布在一起?

 2)定义方式

  1. x、y:样本或向量;
  2. γ:超参数;高斯核函数唯一的超参数;
  3. || x - y ||:表示向量的范数,可以理解为向量的模;
  4. 表示两个向量之间的关系,结果为一个具体值;
  5. 高斯核函数的定义公式就是进行点乘的计算公式;

 3)功能

  • 先将原始的数据点(x, y)映射为新的样本(x',y');
  • 再将新的特征向量点乘(x' . y'),返回其点乘结果;
  • 计算点积的原因此处只针对 SVM 中的应用,在其它算法中的应用不一定需要计算点积;

 4)特点

  • 高斯核运行开销耗时较大,训练时间较长
  • 一般使用场景:数据集 (m, n),m < n;
  • 一般应用领域:自然语言处理;
  1. 自然语言处理:通常会构建非常高维的特征空间,但有时候样本数量并不多;

 

5)高斯函数

  • 正态分布就是一个高斯函数;
  • 高斯函数和高斯核函数,形式类似;

 6)其它

  • 高斯核函数,也称为 RBF 核(Radial Basis Function Kernel),也称为径向基函数;
  • 高斯核函数的本质:将每一个样本点映射到一个无穷维的特征空间;
  1. 无穷维:将 m*n 的数据集,映射为 m*m 的数据集,m 表示样本个数,n 表示原始样本特征种类,样本个数是无穷的,因此,得到的新的数据集的样本也是无穷维的;
  2. 高斯核升维的本质,使得线性不可分的数据线性可分;

三、RBF 转化特征数据原理

 1)转化原理

  1. x:需要改变维度的样本;
  2. np.array([l1, l2, ..., lm]) == X == np.array([x1, x2, ... , xm])Landmark,地标,一般直接选取数据集 X 的所有样本作为地标;(共 m 个)
  3. 对于 (m, n) 的数据集:转化为 (m, m)  的数据集;将 n 维的样本转化为 m 维的样本;
  4. 对于原始数据集中的每一个样本 x,也可以有几个地标点,就将 x 转化为几维;

 2)主要为两部分

  • 先将原始的数据点映射为一种新的特征向量,再将新的特征向量点乘,返回其点乘结果;
  1. 维度转化:样本 x1 转化 x1' :(e-γ||x1 - x1||**2, e-γ||x1 - x2||**2, e-γ||x1 - x3||**2, ..., e-γ||x1 - xm||**2),同理样本 x2 的转化 x2' ;(地标点就是数据集 X 的样本点)
  2. 点乘计算:x1' . x2' == K(x1, x2) == e-γ||x1 - x2||**2,最终结果为一个具体值

 3)实例模拟维度转化过程

  • 一维升到二维
  • 原始样本分布:
  • 第一步:选取地标点:L1、L2 ;
  • 第二步:升维计算

四、程序模拟

  • 目的:将线性不可分的数据变为线性可分;
  • 方法:一维数据升到二维;

 1)模拟数据集

  • x 数据集:每一个样本只有一个特征,且分布规律线性不可分;
  • np.arange(m, n, l):将区间 [m, n) 按间距为 l 等分,等分后的数据点包含 m 值,不包含 n;
  • [0]*len(x[y==0]):[0] 是一个 list,list * C 表示将列表复制 C 份;
  • 如:[0]*5 == [0, 0, 0, 0, 0]

    import numpy as np
    import matplotlib.pyplot as pltx = np.arange(-4, 5, 1)
    y = np.array((x >= -2) & (x <= 2), dtype='int')plt.scatter(x[y==0], [0]*len(x[y==0]))
    plt.scatter(x[y==1], [0]*len(x[y==1]))
    plt.show()

 2)经过高斯核,得到新的数据集

  • np.exp(m):表示 e 的 m 次幂;
  • np.empty(元组):(元组)=(m, n),生成一个 m 行 n 列的空的矩阵;
  • enumerate(iterator):返回可迭代对象的 index 和 value;
  1. for i, data in enumerate(x):i 存放向量 x 的 index,data 存放向量 x 的 index 对应的元素值;

    def gaussian(x, l):# 此处直接将超参数 γ 设定为 1.0;# 此处 x 表示一维的样本,也就是一个具体的值,l 相应的也是一个具体的数,因为 l 和 x 一样,从特征空间中选定;gamma = 1.0# 此处因为 x 和 l 都只是一个数,不需要再计算模,可以直接平方;return np.exp(-gamma * (x-l)**2)# 设定地标 l1、l2 为 -1和1
    l1, l2 = -1, 1
    x_new = np.empty((len(x), 2))for i, data in enumerate(x):x_new[i, 0] = gaussian(data, l1)x_new[i, 1] = gaussian(data, l2)plt.scatter(x_new[y==0, 0], x_new[y==0, 1])
    plt.scatter(x_new[y==1, 0], x_new[y==1, 1])
    plt.show()

SVM(核函数、高斯核函数RBF)相关推荐

  1. SVM使用高斯核函数(RBF)时的超参数C和gamma如何选择

    C C是惩罚系数,即对样本分错的宽容度.C越高,说明越不能容忍出现分错,容易过拟合.C越小,容易欠拟合.C过大或过小,泛化能力变差. gamma 千万要注意地是这个,否则容易死记硬背,即gamma和σ ...

  2. 核函数 高斯核函数,线性核函数,多项式核函数

    核函数是我们处理数据时使用的一种方式.对于给的一些特征数据我们通过核函数的方式来对其进行处理.我们经常在SVM中提到核函数,就是因为通过核函数来将原本的数据进行各种方式的组合计算,从而从低维数据到高维 ...

  3. SVM对于高斯核函数的理解

    问题:怎么分类非线性可分的样本的分类? 目的是样本分类,采用的方法:按一定规律统一改变样本的特征数据得到新的样本,新的样本按新的特征数据能更好的分类,由于新的样本的特征数据与原始样本的特征数据呈一定规 ...

  4. 机器学习笔记(二十八):高斯核函数

    凌云时刻 · 技术 导读:核函数是机器学习算法中一个重要的概念.简单来讲,核函数就是样本数据点的转换函数.这一节我们来看看应用非常广泛的一个核函数,高斯核函数. 作者 | 计缘 来源 | 凌云时刻(微 ...

  5. Tensorflow用SVM(高斯核函数)分类非线性数据

    如果想分割非线性数据集,该如何改变线性分类器映射到数据集?答案是,改变SVM损失函数中的核函数. # Illustration of Various Kernels #---------------- ...

  6. 机器学习之支持向量机实例,线性核函数 多项式核函数 RBF高斯核函数 sigmoid核函数

    文章目录 支持向量机实例 1.线性核函数 2.多项式核函数 3.RBF高斯核函数 4.sigmoid核函数 代码: 结果: 支持向量机实例 1.线性核函数 def test_SVC_linear(): ...

  7. 高斯核函数python代码_单类SVM:SVDD

    话接上文(SVM的简单推导),这篇文章我们来看单类SVM:SVDD.可能大家会觉得很奇怪,我们为什么需要单分类呢?有篇博客举了一个很有意思的例子. 花果山上的老猴子,一生阅猴无数,但是从来没有见过其它 ...

  8. 机器学习--SVM(支持向量机)核函数原理以及高斯核函数

    最近小小地研究了一下SVM,发现这个算法还是相当有意思,今天来给大家讲讲其原理. 首先假设每个样本的特征值为X1.X2...到Xn,即有n个特征值.θ1.θ2.θ3...θn为对应权值. 那么要将上图 ...

  9. sklearn svm如何选择核函数_使用python+sklearn实现成对度量、相关性和核函数

    sklearn.metrics.pairwise子模块实现了评估样本集的成对距离或相关性.此模块包含距离度量和内核.这里对这两个问题作了简要的总结.距离度量是函数d(a, b),如果对象a和b被认为比 ...

最新文章

  1. php 长文本_php字符串太长怎么办
  2. android 颜色资源文件,android中colors.xml颜色设置资源文件的方法
  3. java 与 php lajp_LAJP
  4. 解释与构造---无理数能级
  5. 百度2019暑期实习计算机视觉岗位笔试题
  6. linux 镜像自动安装,制作能自动安装的CentOS镜像文件
  7. 2016_icpc_dalian_onsite
  8. matlab制作打地鼠游戏,scratch编程制作打地鼠的游戏教程
  9. 改变外观_“改”出来的精彩!盘点5种改变葫芦外观的技艺
  10. Abp Vnext应用程序项目中添加docker支持的小结
  11. TensorFlow入门(1)
  12. android 线程池 阻塞队列,【Android框架进阶〖02〗】ThinkAndroid线程池机制
  13. Centos 7安装Docker可视化管理面板安装中文Portainer
  14. java为什么要连接Mysql_为什么要启动mysql workbech,java才能连接mysql数据库呢?
  15. cad插件制作教程_站长私藏CAD插件分享(内附使用教程)
  16. 60、在Visual Studio 2019 环境下,使用C#调用C++生成的dll实现yolov5的图片检测
  17. 10 个超棒的 jQuery 视频插件
  18. c语言中以e为底的指数怎么表示,c++中怎样表示以e为底的
  19. mac不用 linux知乎,用 Linux 让旧 MacBook 重获新生 | Linux 中国
  20. SQL Server Check检查约束用法

热门文章

  1. 暗通道去雾法-对算法的理解Dark Channel Prior
  2. 3d效果图制作傻瓜软件_不会3D软件,也能轻松制作三维效果图!
  3. 2019高考江苏卷语文作文
  4. linux cfs时间,Linux调度的实现(CFS)——虚拟时间计算
  5. 【Python】-- python与json数据格式的转换
  6. 小米运动数据导出并做个性化统计
  7. 华为EROFS文件系统的性能测试
  8. 14西安区域赛总结帖
  9. 趣味c语言程序设计,C语言程序设计的趣味性教学.pdf
  10. 计算机相关专业术语中英文对照