有时候特征x和目标y不呈线性关系,线性模型y=wx+b不能很好地反映事物的规律或者无法对事物进行有效分类,因此此时我们需要使用非线性模型。

(x=([x1,x2,...,xn])T,w=([w1,w2,...,wn])T

比如说下图的分类问题,显然无论用什么样的直线都很难把圈圈和叉叉很好地分隔开来,但是用一个大圆圈却能很好地进行分隔。

这个大圆圈就是使用了非线性模型拟合的结果,以往线性模型中的分类超平面(这里是直线)变成了圆:−x12​−x22​+0.6=0。

可以看到,此时假设函数的特征不是线性模型的(x1,x2),而是变成了(x1^2,x2^2)。我们通过映射关系z=x2,就可以把特征变为(z1,z2)。此时就相当于把x域中的二次式转换为z域中的一次式,得到线性组合

我们把xn​→zn​这个转换过程称之为特征变换(Feature Transform)(这里是非线性变换)。通过特征的非线性变换,可以将非线性模型转换为另一个域中的线性模型来求解。具体过程如下:把原始x值通过映射关系转换成z值,数据由(xn​,yn)变为(zn​,yn);在z域中用线性算法对转换后的数据进行训练,得到最佳w值;训练好线性模型之后,再将z替换为x的映射关系。

需要注意的是:特征变换只是得到新特征的一种方式,可以和任何线性模型结合使用。将线性模型变为非线性模型,并不需要改变模型本身,只需要改变特征输入即可。比如原本线性模型有一个特征x1,其有两个输入值:

[[2]
[3]]

变换为二次模型(quadratic model)后,新的特征输入就变为:

[[4]
[9]]

上面的例子是将原始特征x转变为二次式x2,也可以将x转变为其他形式,例如:可以将特征x变为log(x),exp(x),x0.5,sin(x),cos(x),等等。

下面再来说一下结构化的变换方式:多项式变换(Polynomial Transformation)

如果原本的特征x是2维的,即有2个特征:(x1,x2),那么它的二次多项式为:(x1,x2,x1^2,x1x2,x2^2,1),一共有6项。

如果原本的特征x是d维的,即有d个特征:(x1,x2,…,xd),那么做一个完全的二次变换(其包含所有的二次项、一次项和常数项,此时得到非线性组合:C*d^1+C*d^2+1)后得到的特征维度是:d(d+3)​/2+1。

 

如果变换的阶数更高呢?推广上面的结论,假设阶数为Q,那么对于d维的特征x,将其变换为Q次多项式后,对应的z域的特征维度大约为:

由上图可以看到,将特征x进行多项式变换后,计算和储存新特征的时间复杂度和空间复杂度是O(Qd)---Q的d次方。随着Q和d的增大,计算量和储存量都会变得很大。这就是线性模型变为多项式非线性模型所要付出的代价。

另一个所要付出的代价则更严重,那就是模型复杂度会变高(假设空间的VC维近似等于特征的个数)。我们知道,模型复杂度越高,我们所需要的训练数据也就越多,否则将很容易发生过拟合现象。因此,应先从阶数低的变换开始做起,以防止过拟合问题的发生。

附注:如果特征输入值很小,那么应变换为勒让德多项式(Legendre polynomials)。

特征的非线性变换(Feature Non-linear Transformation)的更多相关文章

  1. 第三讲_图像特征与描述Image Feature Descriptor

    第三讲_图像特征与描述Image Feature Descriptor 概要 特征提取方法 直方图 对图片数据/特征分布的一种统计:对不同量进行直方图统计:可以表示灰度,颜色,梯度,边缘,形状,纹理, ...

  2. RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)

    Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...

  3. 【线性代数】7-2:线性变化的矩阵(The Matrix of a Linear Transformation)

    title: [线性代数]7-2:线性变化的矩阵(The Matrix of a Linear Transformation) categories: Mathematic Linear Algebr ...

  4. 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?

    本文整理自 @老师木 的一条图片新浪微博,从另一个角度给出为何采用 sigmoid 函数作非线性变换的解释. 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?

  5. CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

    from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...

  6. 深度学习——无监督,自动编码器——尽管自动编码器与 PCA 很相似,but自动编码器既能表征线性变换,也能表征非线性变换;而 PCA 只能执行线性变换

    自动编码器是一种有三层的神经网络:输入层.隐藏层(编码层)和解码层.该网络的目的是重构其输入,使其隐藏层学习到该输入的良好表征. 自动编码器神经网络是一种无监督机器学习算法,其应用了反向传播,可将目标 ...

  7. 【线性代数】7-1:线性变换思想(The Idea of a Linear Transformation)

    title: [线性代数]7-1:线性变换思想(The Idea of a Linear Transformation) categories: Mathematic Linear Algebra k ...

  8. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  9. 跟我学Python图像处理丨何为图像的灰度非线性变换

    摘要:本文主要讲解灰度线性变换,基础性知识希望对您有所帮助. 本文分享自华为云社区<[Python图像处理] 十六.图像的灰度非线性变换之对数变换.伽马变换>,作者:eastmount . ...

随机推荐

  1. .NET 的程序集加载上下文

    原文:.NET 的程序集加载上下文 我们编写的 .NET 应用程序会使用到各种各样的依赖库.我们都知道 CLR 会在一些路径下帮助我们程序找到依赖,但如果我们需要手动控制程序集加载路径的话,需要了解程 ...

  2. python 安装 SQLAlchemy 报错

    安装 SQLAlchemy 报错 安装命令 pip install -i https://pypi.doubanio.com/simple SQLAlchemy 报错截图 编码错误,这里我们需要改下源 ...

  3. 2019-07-22 phpStudy配置虚拟主机

    1.右击 phpStudy ->[打开配置文件]->[vhosts-conf]: 2.在里面加入如下代码,并保存: NameVirtualHost *:80 <VirtualHost ...

  4. .net core 使用swagger接口描述

    首先安装nuget包 Swashbuckle.AspNetCore.Swagger Swashbuckle.AspNetCore.SwaggerGen Swashbuckle.AspNetCore.S ...

  5. 二维码扫码登录原理及简单demo

    扫码登录原理转载自: https://www.cnblogs.com/liyasong/p/saoma.html 需求介绍 首先,介绍下什么是扫码登录.现在,大部分同学手机上都装有qq和淘宝,天猫等这 ...

  6. js 获取 对象 属性名称(转载)

    来源:https://www.cnblogs.com/YuyuanNo1/p/9257634.html dataObj = {name : su,age : 26,height : 18cm }; f ...

  7. Java开发环境之MySql

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 叁章:MySql安装教程 1)去官网下载MySql安装包 https://www.mysql.com/downloads/ ...

  8. Nginx 配置文件nginx.conf中文详解

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  9. MySQL-查看DB文件位置

    show global variables like "%datadir%"

  10. Python的路径操作(os模块与pathlib模块)

    Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...