机器学习中的核方法

一、说明

        线性模型很棒,因为它们易于理解且易于优化。他们受苦是因为他们只能学习非常简单的决策边界。神经网络可以学习更复杂的决策边界,但失去了线性模型良好的凸性特性。

        使线性模型表现出非线性的一种方法是转换输入。例如,通过添加特征对作为附加输入。在这种表示上学习线性模型是凸的,但在除了非常低维的空间之外的所有空间中,计算量都是令人望而却步的。有人可能会问:是否可以保留原始数据表示,而不是显式扩展特征空间,并且所有特征都会破坏隐式?令人惊讶的是,答案通常是“是”,而使这成为可能的技术系列被称为内核方法。

二、从特征组合到内核

        增加线性模型表达能力的一种方法是爆炸特征空间。例如,“二次”特征爆炸可能会将特征向量x = <x_1, x_2,x_3,…,x_D> 映射到表示为 φ(x) 的扩展版本:

        然后我们可以在扩展的特征空间上训练分类器。这样做有两个主要问题。第一个是计算性的:如果您的线性算法在特征数量上线性扩展,那么您只需对需要执行的计算量进行平方即可;您还计算了所需内存量的平方。第二个是统计方面的:如果您按照启发式,每个特征应该有大约两个示例,那么您现在将需要二次方数量的训练示例,以避免过度拟合。

        我们将在这篇文章中尝试解决计算问题。

        基于内核的学习的关键见解是,您可以以不需要显式计算 φ( x) 的方式重写许多线性模型。首先,您可以将其视为纯粹的计算“技巧”,使您能够使用二次特征映射的强大功能,而无需实际计算和存储映射向量。稍后你会发现它更深一些。我们讨论的大多数算法在执行特征映射后都涉及w · φ( x )形式的乘积。目标是重写这些算法,以便它们只依赖于两个示例(例如xz)之间的点积;即,它们取决于 φ( x ) · φ( z )。要理解为什么这很有用,请考虑上面的二次展开和两个向量之间的点积。你得到:

        因此,计算 φ( x ) · φ( z ) 所需的时间与计算x · z所用的时间完全相同(加上执行加法和乘法所需的时间)。

        其余的实际挑战是重写算法,以便它们依赖于示例之间的点积,而不是任何显式的权重向量。

三、核化感知器

让我们考虑上一篇文章中的原始感知器算法,这里使用线性代数符号和特征扩展符号 φ(x ) 进行重复。

PerceptronTrain(D,MaxIter) w <- 0                    // initialize weights
b <- 0                                 // initialize bias
for iter=1 to MaxIter dofor all (x,y) ∈ D doa ←  w · φ( x) + b                  // compute activation for this exampleif ya <= 0 thenw ← w + y φ(x )                           // update weightsb <- b + y                          // update bias endifendfor
endfor
return w, b  

        在这个算法中,有两个地方明确使用了φ( x ) 。第一个是计算激活(第 4 行),第二个是更新权重(第 6 行)。目标是消除该算法对 φ 和权重向量的显式依赖。

        为此,您可以观察到在算法中的任何点,权重向量w都可以写成扩展训练数据的线性组合。特别是,在任意点,对于某些参数 α, w = Σ α_nφ(x_n)。最初,w = 0,因此选择α = 0 会产生此结果。如果第一次更新发生在第 n 个训练样本上,则分辨率权重向量就是 y_n φ(x_n),相当于设置 α_n = y_n。如果第二次更新发生在第 m 个训练样本上,那么您所需要做的就是更新 α_m ← α_m + y_m。这一观察结果引出了以下表示定理,该定理指出感知器的权重向量位于训练数据的范围内。

        感知器表示定理:在感知器算法运行期间,权重向量w始终位于(假设非空)训练数据φ(x_1 ), 的范围内。。。, φ (x_N)。

        证明。通过归纳法。基本情况:任何非空集的跨度都包含零向量,即初始权重向量。归纳情况:假设定理在第 k 次更新之前为真,并假设第 k 次更新发生在示例 n 上。根据归纳假设,可以在更新前写出w = Σ α_i φ(x_i) 。新的权重向量为 [Σ α_i φ(x_i )] + y_n φ( x_n ) = Σ (α_i + y_n [ i = n])φ (x_i ),仍然在训练数据的范围内。

        并不是说我们知道对于某些 α_is 总是可以写出w = Σα_nφ(x_n),我们还可以将激活(第 4 行)计算为:

        现在,这仅取决于数据点之间的点积,并且从不明确需要权重向量。您现在可以重写整个感知器算法,以便它永远不会明确引用权重,而仅依赖于示例之间的成对点积

        这种“核化”算法的优点是,您可以“免费”执行特征扩展,例如简介中的二次特征扩展。例如,对于与二次特征完全相同的成本,您可以使用三次特征图,计算为 φ( ̈ x)φ(z) = (1 + x · z)³,它对应于变量之间的三向交互。(而且,一般来说,您可以在相同的计算复杂度下对任何多项式次数 p 执行此操作。)

四、什么构成了内核?

        内核只是广义点积的一种形式。您也可以将其视为 φ( x ) · φ( z ) 的简单简写。这通常称为xaz之间的内核乘积。

        从这个角度来看,我们在上一节中看到的是,您可以重写感知器算法(这同样适用于许多其他算法),以便它们仅依赖于数据点之间的内核乘积,而不依赖于实际数据点他们自己。这是一个非常强大的概念,因为它使得大量非线性算法的开发基本上“免费”(通过应用所谓的内核技巧)。

4.1 核函数的特点

        机器学习(包括 SVM(支持向量机))中使用的核函数具有几个重要特征,包括:

  • Mercer 条件:核函数必须满足 Mercer 条件才有效。这个条件确保核函数是半正定的,这意味着它总是大于或等于零。
  • 正定性:如果核函数始终大于零(除非输入彼此相等),则该核函数是正定的。
  • 非负性:核函数是非负的,这意味着它为所有输入生成非负值。
  • 对称性:核函数是对称的,这意味着无论输入的顺序如何,它都会产生相同的值。
  • 再现性:如果核函数可以用来重建特征空间中的输入数据,则它满足再现性。
  • 平滑度:如果核函数能够将输入数据平滑地变换到特征空间,则称该核函数是平滑的。
  • 复杂性:核函数的复杂性是一个重要的考虑因素,因为更复杂的核函数可能会导致过度拟合并降低泛化性能。

        基本上,核函数的选择取决于具体问题和数据的特征,选择合适的核函数可以显着影响机器学习算法的性能。

4.2 内核函数

        核是用于将原始输入数据点映射到高维特征空间的数学函数,因此,即使数据点在原始输入空间中不是线性可分的,也可以轻松找到超平面。一些常见的核函数包括线性核函数、多项式核函数、径向基函数 (RBF) 和 sigmoid 核函数。

        标准核函数方程:

        高斯核:

        高斯核用于在没有数据先验知识的情况下执行变换。

        sigmoid函数:

        该函数相当于神经网络的第二层感知器模型l,用作人工神经元的激活函数。

五、结论

关于内核函数,将数据通过一个非线性函数映射,通过阔维,可以将不可分问题,形成线性可分问题。关于此问题我们后面将用更多文章论述。
参考资料:
内核方法
算法
机器学习
数据科学

弗朗西斯科·佛朗哥

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

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

相关文章

【面试经典150 | 区间】用最少数量的箭引爆气球

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;合并区间 其他语言python3 写在最后 Tag 【合并区间】【排序】【数组】 题目来源 452. 用最少数量的箭引爆气球 题目解读 每个气球都有一个占据x轴的一个范围&#xff0c;在这个范围里射出一只箭就会引爆该气球&…

C++笔记之关于函数名前的取址符

C笔记之关于函数名前的取址符 相关博文&#xff1a;C之指针探究(十一)&#xff1a;函数名的本质和函数指针 code review! 文章目录 C笔记之关于函数名前的取址符一.函数名可以被视为指向函数的地址二.sayHello和&sayHello是不是等同?三.Qt信号与槽中的取地址符& 一…

2023全新小程序广告流量主奖励发放系统源码 流量变现系统

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件&#xff0c;吃瓜视频&#xff0c;或其他资源内容&#xff0c;通过用户付费买会员来变现&#xff0c;用户需要付费&#xff0c;有些人喜欢白嫖&#xff0c;所以会流失一部分用户&#xff0c;所以就写了这个系统…

Node编写用户登录接口

目录 前言 服务器 编写登录接口API 使用sql语句查询数据库中是否有该用户 判断密码是否正确 生成JWT的Token字符串 配置解析token的中间件 配置捕获错误中间件 完整的登录接口代码 前言 本文介绍如何使用node编写登录接口以及解密生成token&#xff0c;如何编写注册接…

关于 硬盘

关于 硬盘 1. 机械硬盘1.1 基本概念1.2 工作原理1.3 寻址方式1.4 磁盘磁记录方式 2. 固态硬盘2.1 基本概念2.2 工作原理 1. 机械硬盘 1.1 基本概念 机械硬盘即是传统普通硬盘&#xff0c;硬盘的物理结构一般由磁头与盘片、电动机、主控芯片与排线等部件组成。 所有的数据都是…

利用dns协议发起ddos反射攻击

利用DNS服务器发起反射型DDOS&#xff0c;攻击带宽 基本思路&#xff1a; 1、利用any类型的dns查询&#xff0c;可完成发送少量请求数据&#xff0c;获得大量返回数据。 2、将原请求地址改为受害者地址&#xff0c;则dns会向受害者返回大量数据&#xff0c;占用带宽 警告&…

QCC 音频输入输出

QCC 音频输入输出 QCC蓝牙芯片&#xff08;QCC3040 QCC3083 QCC3084 QCC5181 等等&#xff09;支持DAC、I2S、SPDIF输出&#xff0c;AUX、I2S、SPDIF、A2DP 输入 蓝牙音频输入&#xff0c;模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 输入方式切换参考 sta…

AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 梳理 AD9371 时钟&#xff0c;理解采样率和各个时钟之间的关系 …

RabbitMQ基础篇 笔记

RabbitMQ 余额支付 同步调用 一步一步的来&#xff0c;支付业务写完后&#xff0c;如果之后加需求&#xff0c;还需要增加代码&#xff0c;不符合开闭原则。 性能上也有问题&#xff0c;openfeign是同步调用&#xff0c;性能太差。 同步调用耦合太多。 同步的优势是可以立…

网站、小程序常见布局样式记录

文章目录 &#x1f380;前言&#xff1a;&#x1f415;网页样式展示小程序&#xff1a;《携程网》&#x1f380;持续更新... &#x1f380;前言&#xff1a; 本篇博客会收藏一些作者见到的网页、小程序页面&#xff0c;目的是用来寻找制作项目网页页面的灵感&#xff0c;有需要…

mysql第一篇---索引

文章目录 mysql第一篇---索引索引的数据结构为什么使用索引&#xff1f;索引的及其优缺点InnoDB中索引的推演常见的索引概念InnoDB的B树索引的注意事项MyISAM中索引方案索引的代价MySQL数据结构选择的合理性 mysql第一篇—索引 索引的数据结构 为什么使用索引&#xff1f; 索…

修炼k8s+flink+hdfs+dlink(六:学习k8s-pod)

一&#xff1a;增&#xff08;创建&#xff09;。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 直接创建方式&#xff0c;并建立pod。 kubectl create deployment my-nginx-deployment --imagenginx:latest 先创建employment&#xff0c;不…

紫光展锐携中国联通完成RedCap芯片V517孵化测试

近日&#xff0c;紫光展锐携手中国联通5G物联网OPENLAB开放实验室&#xff08;简称“OPENLAB实验室”&#xff09;共同完成RedCap芯片V517创新孵化&#xff0c;并实现在联通5G全频段3.5GHz、2.1GHz、900MHz下的端到端业务验证测试。 V517是一款基于紫光展锐5G成熟平台设计与研发…

Java反射实体组装SQL

之前在LIS.Core定义了实体特性&#xff0c;在LIS.Model给实体类加了表特性&#xff0c;属性特性&#xff0c;外键特性等。ORM要实现增删改查和查带外键的父表信息就需要解析Model的特性和实体信息组装SQL来供数据库驱动实现增删改查功能。 实现实体得到SQL的工具类&#xff0c…

DOS攻击-ftp_fuzz.py

搭建FTP 使用AlphaFuzzer的FTPFUSS进行攻击 挖掘漏洞&#xff0c;自动用特殊字符看能不能把服务器崩掉 这些都是测试的目录 不能随意使用&#xff0c;可能会把C盘内容清掉 也可以自己写脚本测试下

二叉排序树(BST)

二叉排序树 基本介绍 二叉排序树创建和遍历 class Node:"""创建 Node 节点"""value: int 0left Noneright Nonedef __init__(self, value: int):self.value valuedef add(self, node):"""添加节点node 表示要添加的节点&quo…

使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统

上一节内容是 使用IO流完成项目实战水果库存系统https://blog.csdn.net/m0_65152767/article/details/133999972?spm1001.2014.3001.5501 package com.csdn.fruit.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java…

Vue单文件组件

一、.vue文件 我们使用Vue的单文件组件的时候&#xff0c;一个.vue文件就是一个组件。 例如我们创建一个School组件&#xff1a; 二、组件的结构 我们编写网页代码的时候有HTML结构、CSS样式、JS交互。 组件里也是同样存在这三种结构的&#xff1a; <template><d…

(十一)Python模块和包

前面章节中&#xff0c;我们已经使用了很多模块&#xff08;如 string、sys、os 等&#xff09;&#xff0c;通过向程序中导入这些模块&#xff0c;我们可以使用很多“现成”的函数实现想要的功能。 那么&#xff0c;模块到底是什么&#xff0c;模块内部到底是什么样子的&…

【网络】HTTPS讲解(侧重于加密、秘钥、证书的讲解)

HTTPS讲解 前言正式开始安全HTTP和HTTPS的关系什么是加密和解密为什么要加密运营商劫持中间人 常⻅的加密⽅式对称加密⾮对称加密 数据摘要数字签名HTTPS 的⼯作过程⽅案 1 - 只使⽤对称加密&#xff08;不可靠&#xff09;⽅案 2 - 只使⽤⾮对称加密&#xff08;不可靠&#x…