[译] 对比归一化和标准化 —— 量化分析

  • 原文地址:Normalization vs Standardization — Quantitative analysis
  • 原文作者:Shay Geller
  • 译文出自:翻译计划
  • 本文永久链接:github.com/xitu/gold-m…
  • 译者:ccJia
  • 校对者:Fengziyin1234, portandbridge

停止使用 Sklearn 提供的 StandardScaler 作为你的特征压缩方法甚至可以让你训练好的模型有 7% 的准确率提升。

每一个 ML 的从业者都知道特征的压缩是一个重要的议题(更多)

两个最热议的方法就是归一化和标准化。归一化通常来说是将数值压缩到 [0,1] 范围内。标准化指的是重新调整数据,使数据到均值为 0,标准差为 1。

本篇博客希望通过一些实验回答以下的问题:

  1. 我们总是需要压缩特征吗?
  2. 是否有一个最好的压缩方法?
  3. 不同的压缩技术是如何影响不同的分类器?
  4. 压缩方法是否也应该被考虑为一个重要的超参?

我将分析多个不同压缩方法作用于不同特征的实验结果。

内容总览

  1. 为何而来?
  2. 成熟的分类器
  3. 分类器 + 压缩
  4. 分类器 + 压缩 + PCA
  5. 分类器 + 压缩 + PCA + 超参调整
  6. 用更多数据集重复进行实验
  • — 5.1 Rain in Australia 数据集
  • — 5.2 Bank Marketing 数据集
  • — 5.3 Sloan Digital Sky Survey DR14 数据集
  • — 5.4 Income classification 数据集
  • 结论

0. 为何而来?

首先,我尝试理解归一化与标准化之间的区别。

然后,我发现了这篇由 Sebastian Raschka 写的很不错的 博客,这篇文章从数学的角度满足了我的好奇心。如果你不熟悉归一化与标准化的概念,那么请一定花五分钟读一下这篇博客

这里还有篇由 Hinton 大神写的文章解释了为什么使用梯度下降来训练的分类器(如神经网络)需要使用特征的压缩。

好的,我们已经恶补了一波数学的知识,是吧?远远不够。

我发现 Sklearn 提供了很多不同的压缩方法。我们可以通过 the effect of different scalers on data with outliers 有一个直观的认识。但是他们没有讲清楚这些方法是如何影响不同分类器任务的。

我们阅读了很多 ML 的主线教程,一般都是使用 StandardScaler(通常叫做零均值标准化 )或者 MinMaxScaler(通常叫做 Min-Max 归一化)来压缩特征。为什么没人用其他的压缩方法来分类呢?难道 StandardScaler 和 MinMaxScaler 已经是最好的压缩方法了?

我在教程中没有发现关于为什么或者什么时候使用这些方法的解释。所以,我觉得应该通过实验来研究这些技术的性能。这就是这篇文章所要讲的全部东西。

项目细节

和许多数据科学的工程一样,我们会读取一些数据,并使用一些成熟的分类器来做实验。

数据集

Sonar 数据集包含了 208 行和 60 列特征。这个分类任务是为了判断声纳的回传信号是来自金属圆柱还是不规则的圆柱形石头。

这是一个平衡的数据集:

sonar[60].value_counts() # 60 是标签列的名字M 111R 97复制代码

数据集中所有特征都在 0 和 1 之间,但是并不是每一个特征都能保证 1 是最大值或者 0 是最小值。

我选择这个数据集有两个方面的考量,首先是这个数据集足够的小,我可以快速的完成实验。其次,这个问题比较复杂,没有一个分类器可以将准确率做到 100%,我获得的比对数据就更有意义。

在后面的章节,我们也会在其他数据集上做实验。

代码

在预处理环节,我已经计算了所有结果(这个花费了不少时间)。所以,我们只读取结果文件并在其上进行分析。

你可以在我的 GitHub 上获取产生结果的代码: github.com/shaygeller/…

我从 Sklearn 中选取了一些最流行的分类器,如下:

(MLP 是一种多层级的感知器,一个神经网络)

使用的压缩方法如下:

  • 不要将上表的最后一个压缩方法 Normalizer 和我们之前提到的极大极小归一化混淆了。极大极小归一化对应的是第二行的 MinMaxScalar。Sklearn 中的 Normalizer 是将样本单独归一化为一个单位范数。这是一个基于行而非基于列的归一化方法。

实验细节:

  • 为了复现实验场景,我们使用相同的随机数种子。
  • 训练集和测试集的比例为 8:2,并且是随机划分。
  • 所有的结果的准确率都是在 10 个取自训练集的随机交叉验证集上得到的。
  • 我们不讨论测试集上的结果。通常来讲,测试集都是不可见的,并且我们的结论都是只从分类器在交叉验证集上的得分得到的。
  • 在第四部分,我使用嵌套的交叉验证集。一个内部交叉验证集包含 5 个随机的分块,并由超参进行调整。外部是 10 个随机分割的交叉验证集并使用最好的模型参数获得对应得分。这一部分的数据都是源自训练集。图片是最具有说服力的:

我们来看看结果

import osimport pandas as pdresults_file = "sonar_results.csv"results_df = pd.read_csv(os.path.join("..

负数如何归一化处理_「译」 对比归一化和标准化——量化分析相关推荐

  1. js最小化浏览器_「译」解析、抽象语法树(ast) +如何最小化解析时间的5个技巧...

    前言 该系列课程会在本周陆续更新完毕,主要讲解的都是工作中可能会遇到的真实开发中比较重要的问题以及相应的解决方法.通过本系列的课程学习,希望能对你日常的工作带来些许变化.当然,欢迎大家关注我,我将持续 ...

  2. word2vec模型评估_「译」 用 Word2vec 表示音乐?

    [译] 用 Word2vec 表示音乐? 原文地址:Representing music with Word2vec? 原文作者:Dorien Herremans 译文出自:翻译计划 本文永久链接:g ...

  3. x86软件如何在win32下使用_「译」JVM是如何使用那些你从未听过的x86魔幻指令实现String.compareTo的...

    魔幻的String.compareTo 我们之前可能已经见过Java的String的比较方法,它会找出第一个不同的字符之间的距离,没找到不同,就返回较两个字符串长度之差 public int comp ...

  4. js里面字符数字和数字相加_「译」5 个奇怪的只会在 JS 里才发生的趣事

    JavaScript 是一门棘手的语言,就其代码的解析和运行方式,容易让人感觉困惑.这是一门面向对象的语言,但很多年来语言标准里没有类.它最初是为浏览器创造的,但现在也可以在服务器上运行,还可以操作文 ...

  5. mariadb导入sql数据_「译」关系型数据库介绍

    原文来自MariaDB官网的基础知识储备库中关系型数据库的介绍,原文链接:https://mariadb.com/kb/en/library/introduction-to-relational-da ...

  6. canvas 两个圆相交重叠区域颜色填充_「译」Canvas中的环绕规则 -Winding rules in Canvas...

    前言 已经确定了未来一段时间会在Canvas相关领域深耕了,最近刚开始读fabric.js的源码并完成了3w行左右代码的首轮阅读,后续会深入了解背后的原理.在源码的阅读过程中遇到了不少问题,也解决了不 ...

  7. 「译」一起探讨 JavaScript 的对象

    「译」一起探讨 JavaScript 的对象 原文地址:Let's explore objects in JavaScript 原文作者:Cristi Salcescu 译文出自:阿里云翻译小组 译文 ...

  8. jvm 系列(九):如何优化 Java GC 「译」

    本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的"Become a Java GC Expert ...

  9. 变量、中文-「译」javascript 的 12 个怪癖(quirks)-by小雨

    在写这篇文章之前,xxx已经写过了几篇关于改变量.中文-主题的文章,想要懂得的朋友可以去翻一下之前的文章 原文:12 JavaScript quirks 译文:「译」javascript 的 12 个 ...

最新文章

  1. C++函数指针 学习笔记
  2. android之inflater用法
  3. java 循环结构和常用的类 总结笔记
  4. elk 第二篇 , 为elk加入redis, 替换下beats(个人感觉不错2)
  5. mysql学习整理(一)
  6. PHP常用工具方法集...
  7. [20170617]vim中调用sqlplus.txt
  8. vim编辑器中如何查找某个词
  9. php.ini 只读,disabled by the php.ini setting phar.readonly
  10. Bootstrap 不可编辑的控件
  11. Num70 债权查询 债权审核
  12. optenstack配置glance
  13. Clone使用方法详解【转载】
  14. python如何删除代码_删除代码(上)
  15. 【python】蔡勒公式计算日期
  16. 尚学堂马士兵 Struts2 笔记心得修改版
  17. 女生什么样的表现会说明她喜欢你?——男生记得都看一遍,谨记~
  18. postman面试_接口测试面试常见问题
  19. 【重磅】Crust主网进入节点接入阶段
  20. VproC#混合编程,加载图片

热门文章

  1. Spring boot+Thymeleaf+easyui集成:js创建组件页面报错
  2. BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
  3. Bootstrap框架(二)
  4. mysql将俩个SQL查询出来的不一样的结果横向拼接成一行数据
  5. ajax常见的面试题
  6. CXF WebService整合SpringMVC的maven项目
  7. HDU 4932 Miaomiao#39;s Geometry(推理)
  8. 快速构建Windows 8风格应用5-ListView数据控件
  9. 若依集成 WebSocket
  10. 在Tomcat上部署WebService服务