用c语言实现核函数,统计学习方法:核函数(Kernel function)

作者:桂。

时间:2017-04-26  12:17:42

d946099a9830877004372855c7231b06.png

前言

之前分析的感知机、主成分分析(Principle component analysis, PCA)包括后面看的支撑向量机(Support vector machines, SVM),都有用到核函数。核函数是将信号映射到高维,而PCA一般用来降维。这里简单梳理一下核函数的知识:

1)核函数基本概念;

2)核函数的意义;

内容为自己的学习记录,其中多有参考他人,最后一并给出链接。

一、核函数基本概念

先来看看核函数的定义:

caf36b85bf40802b94273d4f6bed4239.png

7af1f55ec443661b4a574c2c6573cea2.png

核函数:是映射关系

d88d946cc2a402cb374206859d7d5118.png的内积,映射函数本身仅仅是一种映射关系,并没有增加维度的特性,不过可以利用核函数的特性,构造可以增加维度的核函数,这通常是我们希望的。

例如这样一个图:

97d24d657674dc12055eb2769076f8e3.png

二维映射到三维,区分就更容易了,这是聚类、分类常用核函数的原因。为什么PCA这样一个降维算法也用核函数呢?

左图为原数据,右图为映射到三维的数据,可以看出:同样是降到1维,先通过Kernel映射到(Kernel是映射的内积,不要弄乱了)三维,再投影到1维,就容易分离开,这就是Kernel在PCA降维中的应用,本质还是对原有数据增加维度。

48e376c736c378f406ff9e0331e7d312.png

既然核函数这么神奇,就看看它的来龙去脉。

二、核函数的意义

A-核函数常见应用

先来看看核函数几个常用的地方:

1.核感知机

在前面分析感知机时提到:

17e29d536fd536025694ca026a3b97f7.png

2.核聚类(Kernel Kmeans)

在前面分析核聚类时提到:

6b2c9db38c20d1f22114c0783673d332.png

3.核PCA(kernel PCA)

具体定义可以参考wikipedia,根据前文分析的PCA步骤,有一步是利用相关矩阵的特征值分解,看看相关矩阵:

cbae985b746315d7ab39ea9f07057823.png

又看到了相乘的形式,自然可以用Kernel:

aa5434425bd660dde684f53248c85c3b.png

4.支撑向量机SVM

支撑向量机对偶形式的目标函数:

a695c25b6c585c5cb347e933345305f5.png

又看到了

7f6a3034f151b0058a3b64aeb1269847.png的形式,从而得到SVM的核函数形式:

2c191bd6c9eee810e3619ed90cee83f3.png

B-核函数为什么可以映射到高维?

1.为什么不用映射函数

bdf1154f86f6216409d461b80a9d1ba2.png,而用他们的内积形式,即Kernel函数?

因为(x,z)一起出现的时候,

a7adf2ed332bd94d29ffc13afe52d8e5.png有许多固定的形式可以调用,而不必求解或者关心

f3c225f5eb353e173404c4a32930f9d0.png的具体形式,这大大简化了求解。

2.什么样的函数才可以叫做核函数?

直接给出条件:

e7d9fc06497e40e47cf5e39261943e39.png

具体参考:李航《统计学习方法》p120~122。

3.为什么实现数据映射到高维?

看一个例子:

c1f2cacdceaed1d1a03d970faee36ae2.png

29aa04137e555b746c637e3ebe7cb065.png

这就从二维变成了三维,当然还可以更高维:

799db54b1081434d905aeb347407c2bb.png

这里可以粗略理解成:多项式可以实现数据的维度扩增,而高斯核是指数形式,展开就是无穷多的多项式,所以高斯核可以将数据映射到无穷维度。

4.常用核函数

多项式核:

b9758fc347e954f11bd2adf8646a19c6.png

高斯核:

b8c8c5bff97579750bd5e55c4a8dede5.png

参考:

李航《统计学习方法》

核函数(kernel function)

百度百科的解释: 常用核函数: 1.线性核(Linear Kernel): 2.多项式核(Polynomial Kernel): 3.径向基核函数(Radial Basis Function),也叫高 ...

[转]核函数K(kernel function)

1 核函数K(kernel function)定义 核函数K(kernel function)就是指K(x, y) = ,其中x和y是n维的输入值,f(·) 是从n ...

统计学习方法c++实现之六 支持向量机(SVM)及SMO算法

前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...

统计学习方法:KNN

作者:桂. 时间:2017-04-19  21:20:09 链接:http://www.cnblogs.com/xingshansi/p/6736385.html 声明:欢迎被转载,不过记得注明出处哦 ...

李航《统计学习方法》CH01

CH01 统计学方法概论 前言 章节目录 统计学习 监督学习 基本概念 问题的形式化 统计学习三要素 模型 策略 算法 模型评估与模型选择 训练误差与测试误差 过拟合与模型选择 正则化与交叉验证 正则 ...

统计学习方法:支撑向量机(SVM)

作者:桂. 时间:2017-05-13  21:52:14 链接:http://www.cnblogs.com/xingshansi/p/6850684.html 前言 主要记录SVM的相关知识,参考 ...

统计学习方法—SVM推导

目录 SVM 1. 定义 1.1 函数间隔和几何间隔 1.2 间隔最大化 2. 线性可分SVM 2.1 对偶问题 2.2 序列最小最优算法(SMO) 3. 线性不可分SVM 3.1 松弛变量 3.2 ...

【NLP】基于统计学习方法角度谈谈CRF(四)

基于统计学习方法角度谈谈CRF 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...

统计学习方法 --- 感知机模型原理及c++实现

参考博客 Liam Q博客 和李航的 感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而 ...

随机推荐

PHP判断文件或者目录是否可写

在PHP中,可用is_writable()函数来判断一个 文件/目录 是否可写,详情如下: 参考 is_writable (PHP 4, PHP 5) is_writable — 判断给定的文件名是否 ...

利用K-means聚类分类,进行特征学习

这只是老师安排的一个实验,准备过程中遇到各种问题,现在贴出来供大家参考,是Andrew Ng参与的研究, 论文依据如下,第二篇是一篇相关的论文, Learning Feature Representa ...

使用火狐的restclient发送http接口post及get请求

1.在firefox安装restclient插件,具体参照http://jingyan.baidu.com/article/1876c8529b07e3890b137623.html: —.发送pos ...

ios--集成支付宝钱包支付iOS SDK的方法与经验

文/胖花花(简书作者)原文链接:http://www.jianshu.com/p/fe56e122663e著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 没想到,支付宝的SDK是我目前 ...

C#之 HashSet(临时笔记,未参考资料,请慎重)

HashSet是一个集合,类似于DataSet,但是其主要用途是用来存放同一种类型的元素(string.row.table等),如果添加的元素跟定义时初始的类型不一致,就会直接编译失败. 例如: Ha ...

js获取url参数值的两种方式

js获取url参数值的方法有很多,下面也为大家介绍两种.  方法一:正则分析法  function getQueryString(name) {  var reg = new RegExp(&quot ...

表达式:使用API创建表达式树(3)

一.DebugInfoExpression:发出或清除调试信息的序列点. 这允许调试器在调试时突出显示正确的源代码. static void Main(string[] args) { var asm ...

CocoaAsyncSocket框架的简单封装

在iOS开发中使用socket(CFNetwork),一般都是用第三方库AsyncSocket. 参考博客:http://my.oschina.net/worldligang/blog/396881? ...

Node.js进阶:5分钟入门非对称加密方法

前言 刚回答了SegmentFault上一个兄弟提的问题.这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下. 非对称加密的理 ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值