matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)

ef82bab5d884bb778798d25629861ac1.png

高维映射跟核方法的概念很容易混淆。

高维映射通过将样本从原始空间映射到一个更高维的特征空间,从而解决了低纬下难以解决的问题。

核方法往往跟高维映射配合使用,可以看做是一种技巧,可以通过它来避免这种映射的计算。

下面详细介绍一下这两个概念。

一、高维映射

我们知道,线性回归是用一条直线来拟合数据。但是我们往往会遇到数据并不服从线性分布的情况,比如:

c7b27d800d1c850b6e6a718c5fc59563.png

上图这种情况,明显是一个二次函数的分布。如果我们仍旧用线性回归方程

,那结果是拟合了一条直线,这条直线无论如何也不能完美拟合出这样的二次函数的分布。

于是,我们选择变成一个二次方程来拟合:

它虽然是个二次函数,其实仍然可以看成是一个线性回归。但是现在不是对

的线性回归,而是对于一个更高维度的向量
的线性回归:

假如把 输入

看成是一个 1 维的向量,那么
其实就是一个关于
的,更高维度的向量。我们把这种能够把一个向量提升维度的函数,叫做
。直观上来讲,在应用了
以后,向量
被拉长了,所以我们把它叫做拉伸函数好了。

72bd1bbce2d1498a8f9fda44ffeb836f.png

拉伸函数是一类函数,表面上看,只要是能把一个向量经过各种修改让它的维度变高,这样的函数都能当成拉伸函数来用。然而并不是这样的,假如你只是单纯地对向量

的分量做线性组合,你会发现实际上并没有提升它的空间,比如我设计一种纯线性组合的拉伸的函数:

拉伸为
,那么

那么对于提升后的方程,

,乍一看是把2维提升到了4维。其实通过变换以后,相当于还是在对
做线性组合。要选择确确实实提升了维度的拉伸函数。而且,我们的拉伸函数得把原来向量的每个维度都得照顾到。

这里分布是一个二次函数,如果我们遇到了更加复杂的函数,我们依然可以通过选取合适的拉伸函数来变成线性的问题。幸运的是可以证明,只要数据的分布在维度有限的空间上,我们总是(发)能够找到一个更高维度的空间,使得它的分布是线性的。

因此通过高维映射以后,不管原来是不是线性的,总能通过对向量

做拉伸变化,转化成一个高维空间里的线性的回归问题:

二、求解高维映射后的线性方程

如果不做高维映射的话,线性回归的解是:

不明白的可以看看我另外一篇的讲线性回归的,里面包含了推导过程。

折射:线性回归Linear regression​zhuanlan.zhihu.com
edd073b705ce2ffd83238419b80d63d8.png

我举个例子,帮助你回忆一下里面各个符号的含义。假设我们有5个训练样本

,每个样本的有2个维度

公式中的

就是把所有训练集拼成的矩阵,每行代表一个训练样本。
是一个对角全为 1 ,其他位置全是0的单位矩阵,
是每个样本输出值拼成的一个向量:

162e324f6a3cc5594ac2a9dad0104ae2.png

如果我们要对这个公式进行高维映射,也就是说我们对

里的每个样本,也就是每一行的向量都进行了拉伸变换,像这样,我们把拉伸过后的函数叫做
:

5746b41aa407ac0c06a6a5bdb74811a4.png

我们用

替换公式里的
,从而得到:

好了,右边全都是已知量,我们已经解出来了这个模型了。

我们做完高维映射之后的线性方程,要如何去预测模型呢?来模拟一下这个过程:

假设,我们现在有

个训练数据,每个数据是
维的。

第一步,我们得计算出

来。

首先把每个数据当成一行,拼成一个矩阵

。然后把矩阵的每一行用拉伸函数做拉伸,从而得到
,最后再套公式求得

第二步,下面我们就来利用它做预测了,假如我们要预测

的输出值
,我们又得先对变量
做一次拉伸,得到
,再乘上权重,才能求出它的预测值

看看上面的过程中,我们用了多少次拉伸函数。在训练过程中,我们对训练集里面每个样本都用了一次拉伸。在预测的时候,我们又要对预测集里面的每个样本做一次拉伸。现在我告诉你,拉伸函数往往计算量非常大,那么计算这个拉伸显然是一个非常大的开销。

虽然说理论上,因为有限维度的数据必然存在一个拉伸函数将数据映射到高维并且满足线性分布。也就是说必然存在一个完美的拉伸函数。然而,我们往往并不知道到底怎么样的函数才是完美的拉伸函数,选择合适的拉伸函数也是一个非常麻烦的问题。

现在我告诉你,我们有一种取巧的办法。使得我们根本不用计算拉伸函数,有时候甚至你都不需要知道拉伸函数是什么,我们依然能够做预测。这个无比巧妙的简便方法,帮助我们跳过了拉伸的步骤,这个方法就叫做核方法。

三、核函数(Kernel function)

你可能非常迫切地想知道这个巧妙的核方法到底是什么。但是我要在这里卖个关子,不直接告诉你核方法是怎么来的,我们从定义出发一步一步慢慢推导出来。

现在我要转换一下话题,我们先研究研究这个拉伸函数

。我们给它搭配一个“兄弟”,假设向量
是某个跟
同样维度的某个向量,我们对
也同样做拉伸。并且拉伸完之后,我们把这两个向量求内积。

5750dccbfd0c0c33467e95c4a4f31a65.png

我们知道,两个向量做内积得到的是一个值。这个过程中,我们先是把两个向量拉伸到高维,然后又通过求内积变回一维。

在数学里面,有这样一类函数,它的参数是2个向量,它的输出是一个标量值。它有个特点,就是对于任何相同形状的输入向量

,它总能改写成这样的形式:

解释一下,这类函数对于任何输入向量

,它都能改写成分别对两个输入向量做拉伸以后再求内积的表达形式。

这类核函数每个都有各自的表达式,举个例子:

线性核:

多项式核:

注意到,这个表达式里面是不含有拉伸函数的。但是它既然满足核函数的条件,它一定是能改写成两个向量拉伸求内积的形式。

线性核里面隐藏的变换就是做线性拉伸变换(我们之前讨论过,光用线性拉伸是不能解决非线性问题的)。多项式核自然就是做几次方的拉伸变换。换句话说,每一个能被叫做核函数的函数,里面都藏着一个对应拉伸的函数。这些核函数的命名通常也跟如何做拉伸变换有关系。

总结一下,我们现在反了过来,先找满足核函数条件的的表达式,再倒推出一种映射关系。我们选哪个核函数,实际上就是在选择用哪种方法映射。通过核函数,我们就能跳过映射的过程。

四、核方法(Kernel method)

好了,现在我们打定主意,要利用核函数来跳过做映射了。我们假如找到了一个核函数,也就是说我们的拉伸函数也定下来了。我们改写一下核函数的参数,写成这样的形式:

到底要怎么利用呢?先观察一下高维映射以后的模型表达式:

观察一下上面两个公式,你一定能够联想到,肯定要从这个

上面做点文章。没错,我们现在就是要想办法从
里面分离出一个
项来,跟我们的
搭配在一起组成我们的核函数的表达式。

先看看

的计算公式:

在这里跟拉伸项最有关系的一项就是

了,注意这里全都是在做线性组合,

我们我们可以令

,这里的
我们不知道是什么东西,只知道它是一个向量。

使用

有什么好处呢?

试着把它展开一下,矩阵乘向量的怎么写成求和的形式呢。其实矩阵右乘一个向量,相当于对矩阵的每一列都乘对于向量位置的分量再累加,如图所示:

cd22698eebf4f7ff906dee42f0e90f7b.png

矩阵

是转置过的,它的每一列代表一个训练数据,为了避免混淆,我们用
表示第n个训练数据,可以表示为:

用右边这个替换我们模型里面的

看到没有,我们右边已经出现了一个核函数的表达形式了。我们可以直接根据公式

来替换右边,从而得到:

现在的y表达式中,已经不含有拉伸函数项了,这样我们就避开了求拉伸函数的过程。

但是你会发现,我们并不知道

是什么,现在我们就来求这个

我们得从求

的表达式开始了,假设我们用最小二乘法做,首先从损失函数开始,同时加入了L2正则项:

如果加了L2正则以后的线性损失函数的公式看不懂,可以去看我写的 机器学习中的正则化,L1 L2正则。 令

,将
代入到函数中:

求关于

的偏导,并且等于0,可得:

解得:

再看

现在我们把所有的拉伸函数都消除掉了。我们现在就可以用求出来的

来做预测,使用之前我们推出来的公式:

五、总结

在使用机器学习模型做回归或者分类的时候,假如在低维度空间下数据集不好用,那么可以尝试通过把输入的值做高维映射来解决。高维映射不仅仅用于线性回归,包括逻辑回归,还有SVM,尤其是SVM。

由于做高维映射的计算量比较大。当我们遇到需要做高维映射的时候

,可以通过核方法,把需要学习的模型配出一项来组成
的形式,然后用一个核函数
来替换它,从而消除掉把低维向量往高维映射的过程
。这种替换的技巧就叫做核方法,能够实现替换目的的函数叫做核函数。

利用核方法并非没有缺点。原来的线性模型显然是一种参数化方法,好处是训练完成的模型只需要存储权重向量

。然而在使用了核方法以后,由于我们用训练集替换掉了权重项,因此相当于转化成了非参数化的方法,显然增加了需要存储的数据量,同时每一次做预测都需要用到全部训练数据集。对于参数化和非参数化方法的概念可以看我的另外一篇文章:
折射:机器学习中的正则化,L1 L2正则​zhuanlan.zhihu.com
edd073b705ce2ffd83238419b80d63d8.png

原创,转载请注明出处。

初学者,不可避免出现错误。如果有任何问题,欢迎指正。也欢迎一起交流、讨论。

欢迎关注我的专栏:

https://zhuanlan.zhihu.com/c_1024970634371186688​zhuanlan.zhihu.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 1015. 摘花生

Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。…

干货,不小心执行了rm -f,除了跑路,如何恢复?

作者:justmine头条号:大数据与云原生微信公众号:大数据与云原生创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。为了方便阅读,微信公众号已按分类排版,后续的文章…

数据结构----二叉树叶子结点到根节点的高度计算

数据结构----二叉树叶子结点到根节点的高度计算 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {int data;struct bstTree* lchild, *rchild; }bstTree; void createBSTTree(bstTree* & T, int data) {//创建二叉排序树bst…

《三体》中的“维度”

《三体》里描述了这样的一个故事&#xff1a;当地球和三体星的坐标都暴露在宇宙之下时&#xff0c;歌者文明向太阳系发了一片二向箔&#xff0c;包括地球在内的太阳系文明全部降成二维&#xff0c;一切烟消云散。我们生存在三维空间&#xff0c;一旦把我们扔到了二维空间&#…

nginx 带宽_前端工程师不可不知的Nginx知识

历史背景互联网的全球化导致了互联网的数据量快速增长&#xff0c;加上在本世纪初摩尔定律在单核 CPU 上的失效&#xff0c;CPU 朝着多核方向发展&#xff0c;而 Apache 显然并没有做好多核架构的准备&#xff0c;它的一个进程同一时间只能处理一个连接&#xff0c;处理完一个请…

网格路径最小数字和

给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 数据范围&#xff1a; n < 100,m < 100; 输入&#xff1a; 3 3 1 3 1 1 5 1 4 2 1 输出&a…

word List 19

word List 19 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

矩形法_字体设计 | 新手必学,超简单的矩形造字法!!

点击蓝字关注&#xff0c;创智助你长姿势作为一个刚刚踏入设计界的“萌新”来说&#xff0c;字体设计可能是除了版式设计之外最简单的功课了&#xff0c;那么今天教学内容就是最简单的字体设计&#xff1a;矩形造字法。矩形造字法是以软件中的“矩形工具”为基础&#xff0c;以…

NETCore Bootstrap Admin 通用后台管理权限 [1]: 前后台分离系统简介

前言从事软件开发这个行业现在已经有十几年了&#xff0c;项目无论大小权限认证、授权模块总是或多或少有功能需求的&#xff0c;这一块费时费力但是又存在于后台&#xff0c;使用最多的可能是运维人员所以处于出力不讨好的尴尬地位&#xff0c;每次有新的项目总是要耗费不少时…

不同路径 I

一个机器人位于一个 n * m 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。(n表示行&#xff0c;m表示列) 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为“Finish”&#xff09;。 问总共有多少条不同…

数据结构---前序和中序遍历的二叉树序列还原二叉树

数据结构—前序和中序遍历的二叉树序列还原二叉树 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {char data;struct bstTree* lchild, *rchild; }bstTree; bstTree * reStoreTree(char* pre, int preSt, int preEnd, char *mi…

c++ 位运算_C语言之运算符

运算符代表的是各种各样的运算(操作)已知的运算符&#xff1a; - * / (赋值)1.运算符的分类运算符的分类方法很多&#xff0c;通常用功能或者操作数个数进行分类功能&#xff1a;算数运算符 逻辑运算符 位运算符 地址运算符.......操作数个数&#xff1a;单目运算符 双目运算符…

微软 PowerBI 被评为商业智能领导者-13年的企业产品奋斗史解读

恭喜微软连续 13 年被Gartner评为BI平台领导者。您可以插上耳机&#xff0c;打开音乐来一起欣赏这个过程。原文地址&#xff1a;https://powerbi.microsoft.com/zh-cn/blog/microsoft-named-a-leader-in-gartners-2020-magic-quadrant-for-analytics-and-bi-platforms/被评为第…

word List20

word List20 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

[python交互]Excel催化剂与python交互原理剖析,py开发者按此规范可自行扩展功能...

只需简单地编写小段py脚本&#xff0c;就可以借助Excel催化剂的平台作用&#xff0c;将写出的py脚本&#xff0c;嫁接到Excel的环境上使用&#xff0c;在Excel的广阔用户群体上带来更多的产出价值。也大大增加了将自己的python技能输出到普通用户可享用的层面。按照本文的规范&…

background图片不显示_一种解决Retina屏幕1px边框显示问题的方案

一、背景介绍&#xff1a;Retina是一种新型高分辨率的显示标准&#xff0c;是把更多的像素点压缩至一块屏幕里&#xff0c;从而达到更高的分辨率并提高屏幕显示的细腻程度&#xff1b;同时CSS样式表中px单位是一个相对值&#xff0c;并不是绝对值&#xff0c;实际在Retina屏幕中…

多重背包问题 I

有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件&#xff0c;每件体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使物品体积总和不超过背包容量&#xff0c;且价值总和最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N&a…

gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型

当你第一次定义Protocol Buffer的消息的时候&#xff0c;你肯定会给消息设定一套规则需求。但是随着时间的推进&#xff0c;你的业务可能会发生了变化&#xff0c;与此同时&#xff0c;你的Protocol Buffer消息类型的需求也会随之变化。也就是说&#xff1a;有一些字段可能会发…

opengl如何画出一个球_少儿美术绘画教程:毛线球

小朋友们&#xff0c;你们平时画画有没有遇到过没有灵感的时候&#xff0c;面对画纸却不知道画些什么呢&#xff1f;今天我们来介绍一种创意思维&#xff0c;叫发散性思维。以一个毛线球为出发点。通过毛线球&#xff0c;我们可以想到圆球&#xff0c;通过圆球我们可以想到圆形…

数据结构---后序和中序遍历的二叉树序列还原二叉树

数据结构—后序和中序遍历的二叉树序列还原二叉树 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {char data;struct bstTree* lchild, *rchild; }bstTree; bstTree * reStoreTree(char* pre, int preSt, int preEnd, char *mi…