背景:数据挖掘/机器学习中的术语较多,而且我的知识有限。之前一直疑惑正则这个概念。所以写了篇博文梳理下

摘要:

  1.正则化(Regularization)

    1.1 正则化的目的  

    1.2 正则化的L1范数(lasso),L2范数(ridge)

  2.归一化 (Normalization)

      2.1归一化的目的
    2.1归一化计算方法  

    2.2.spark ml中的归一化

    2.3 python中skelearn中的归一化

知识总结:

1.正则化(Regularization)

1.1 正则化的目的:我的理解就是平衡训练误差与模型复杂度的一种方式,通过加入正则项来避免过拟合(over-fitting)。

1.2 结构风险最小化(SRM)理论: 
  经验风险最小化 + 正则化项 = 结构风险最小化
 
  经验风险最小化(ERM),是为了让拟合的误差足够小,即:对训练数据的预测误差很小。但是,我们学习得到的模型,当然是希望对未知数据有很好的预测能力(泛化能力),这样才更有意义。当拟合的误差足够小的时候,可能是模型参数较多,模型比较复杂,此时模型的泛化能力一般。于是,我们增加一个正则化项,它是一个正的常数乘以模型复杂度的函数,aJ(f),a>=0 用于调整ERM与模型复杂度的关系。结构风险最小化(SRM),相当于是要求拟合的误差足够小,同时模型不要太复杂(正则化项的极小化),这样得到的模型具有较强的泛化能力。
  
  下面是来自一篇博文的例子
  优化如下定义的加了正则项(也叫惩罚项)的损失函数:    
  

  后面的就是正则化项,其中λ越大表明惩罚粒度越大,等于0表示不做惩罚,N表示所有样本的数量,n表示参数的个数。

  如果绘图表示就是这样:
  

    上图的 lambda = 0表示未做正则化,模型过于复杂(存在过拟合)

 
 
   

  上图的 lambda = 1 添加了正则项,模型复杂度降低
1.3 正则化的L1,L2范数
  L1正则化:
 ,其中C0是代价函数,是L1正则项,lambda是正则化参数

  L2正则化:

 ,其中是L2正则项,lambda是正则化参数

 L1与L2正则化的比较:

   1.L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。

    2.Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。

1.4 总结:结构风险最小化是一种模型选择的策略,通过加入正则项以平衡模型复杂度和经验误差;更直观的解释——正则项就是模型参数向量(w)的范数,一般有L1,L2两种常用的范数。 

2.归一化 (Normalization)

  2.1归一化的目的:

    1)归一化后加快了梯度下降求最优解的速度;

    2)归一化有可能提高精度。详解可查看

  2.2归一化计算方法      

  公式:
    对于大于1的整数p, Lp norm = sum(|vector|^p)(1/p) 

  2.3.spark ml中的归一化

  构造方法:
  http://spark.apache.org/docs/2.0.0/api/scala/index.html#org.apache.spark.mllib.feature.Normalizer
  
newNormalizer(p: Double) ,其中p就是计算公式中的向量绝对值的幂指数
  可以使用transform方法对Vector类型或者RDD[Vector]类型的数据进行正则化
  
  下面举一个简单的例子:
  scala> import org.apache.spark.mllib.linalg.{Vector, Vectors}  

  scala> val dv: Vector = Vectors.dense(3.0,4.0)
  dv: org.apache.spark.mllib.linalg.Vector = [3.0,4.0]

  scala> val l2 =  new Normalizer(2)

  scala> l2.transform(dv)
  res8: org.apache.spark.mllib.linalg.Vector = [0.6,0.8]

  或者直接使用Vertors的norm方法:val norms = data.map(Vectors.norm(_, 2.0))

  2.4 python中skelearn中的归一化

  from sklearn.preprocessing import Normalizer
  
  #归一化,返回值为归一化后的数据
 

  Normalizer().fit_transform(iris.data)

  
 
 
 

数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑的更多相关文章

  1. 数据预处理 | 使用 Pandas 统一同一特征中不同的数据类型

    出现的问题:如图,总消费金额本应该为float类型,此处却显示object 需求:将 TotalCharges 的类型转换成float 使用 pandas.to_numeric(arg, errors ...

  2. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  3. sklearn中的数据预处理和特征工程

    小伙伴们大家好~o( ̄▽ ̄)ブ,沉寂了这么久我又出来啦,这次先不翻译优质的文章了,这次我们回到Python中的机器学习,看一下Sklearn中的数据预处理和特征工程,老规矩还是先强调一下我的开发环境是 ...

  4. 机器学习实战基础(九):sklearn中的数据预处理和特征工程(二) 数据预处理 Preprocessing & Impute 之 数据无量纲化

    1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”.譬如梯度和矩阵为核心的算法中,譬如逻辑回 ...

  5. 文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer

    文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作.在介绍向量化之前,我们先来了解下词袋模型. 1.词袋模型(Bag of words,简称 BoW ) 词袋模型假设我们不考虑文本中词与词 ...

  6. 深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用

    深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用 周翼南 北京大学 工学硕士 373 人赞同了该文章 基于深 ...

  7. Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别

    敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...

  8. postgreSQL使用sql归一化数据表的某列,以及出现“字段 ‘xxx’ 必须出现在 GROUP BY 子句中或者在聚合函数中”错误的可能原因之一

    前言: 归一化(区别于标准化)一般是指,把数据变换到(0,1)之间的小数.主要是为了方便数据处理,或者把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权. 不过还是有很多人使用 ...

  9. 借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率

    原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升 ...

随机推荐

  1. 结合Jexus + Kestrel 部署 asp.net core 生产环境

    ASP.NET Core 是微软的全新的框架.这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖. 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: ...

  2. [PHP内核探索]PHP中的哈希表

    在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...

  3. document.documentElement.clientHeight 与 document.body.clientHeight(杜绝千篇一律的抄袭!!)

    document.documentElement.clientHeight 与 document.body.clientHeight用来获取页面可视高度我觉得有点问题.这两个应该不是一个东西. 页面中 ...

  4. OpenCASCADE BRep Projection

    OpenCASCADE BRep Projection eryar@163.com 一网友发邮件问我下图所示的效果如何在OpenCASCADE中实现,我的想法是先构造出螺旋线,再将螺旋线投影到面上. ...

  5. git亲测命令

    一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...

  6. WebGIS中等值面展示的相关方案简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值面是气象.环保等相关项目上常用到的效果展示.在传统的CS项 ...

  7. c#语言规范

    0x00 分类 C#语言规范主要有两个来源,即我们熟知的ECMA规范和微软的规范.尽管C#的ECMA规范已经前后修订4次,但其内容仅仅到C# 2.0为止.所以慕容为了方便自己和各位方便查询,在此将常见 ...

  8. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  9. 水平可见直线 bzoj 1007

    水平可见直线 (1s 128M) lines [问题描述] 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆 ...

  10. javaScript生成二维码(支持中文,生成logo)

    资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrco ...