文章目录

  • 一、中心化/零均值化
  • 二、归一化
  • 三、PCA和白化

数据预处理在构建网络模型时是非常重要的,往往能够决定训练结果。当然对于不同的数据集,预处理的方法都会有或多或少的特殊性和局限性。在这里介绍三种当前最为普遍被广泛使用的预处理方法。

一、中心化/零均值化

零均值化就是将每一维原始数据减去每一维数据的平均值,将结果代替原始数据。
利用python具体实现如下:

import numpy as np
import matplotlib.pyplot as plt
from numpy import randomx = random.rand(50,2)     #随机生成一个50*2(50个样本,2维)的实数矩阵
# print(x)
plt.scatter(x[:,1],x[:,0],color="red")  #以x的第二列为各点的横坐标,第一列为纵坐标
new_ticks = np.linspace(-1, 1, 5)      #固定坐标轴在-1到1之间,共5个值
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()#***************零值化******************#
x -= np.mean(x,axis = 0)  #去均值
#print(x)
plt.scatter(x[:,1],x[:,0],color="black")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()

随机初始化:

零值化后:

可以看到,同一坐标轴下,数据中心化了。

二、归一化

归一化就是将原始数据归一到相同尺度,通常有两种方法来实现归一化:

  • 原始数据除以数据绝对值的最大值,以保证所有的数据归一化后都在-1到1之间。
  • 原始数据零均值后,再将每一维的数据除以每一维数据的标准差。
    这里利用python实现第二种:
import numpy as np
import matplotlib.pyplot as plt
from numpy import randomx = random.rand(50,2)
# print(x)
plt.scatter(x[:,1],x[:,0],color="red")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.xticks(new_ticks)
plt.show()#***************归一化******************#
x -= np.mean(x,axis = 0)  #去均值
x /= np.std(x)   #归一化
#print(x)
plt.scatter(x[:,1],x[:,0],color="red")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()

随机初始化:

归一化后:

可以看到,数据分布更均匀了。

三、PCA和白化

PCA:主成成分分析,首先将数据变成0均值的,然后计算数据的协方差矩阵来得到数据不同维度之间的相关性,协方差矩阵的第(i,j)个元素表示数据第i维和第j维特征的相关性,特别地,对角线上的元素表示方差。另外,协方差矩阵是对称并且半正定的。可以对该协方差矩阵进行SVD分解,其中U矩阵的列为特征向量,S对角线上的元素是奇异值(等同于特征值的平方)。为了对数据去相关,首先将数据(0均值后的)投影到特征向量上,注意,U的列是相互正交的向量,也因此它们可以被看成基向量。这种投影相当于将数据X旋转、投影到新的基向量轴上。如果再去计算Xrot的协方差矩阵的话,就会发现它是一个对角阵,说明不同维度之间不再相关。np.linalg.svd的一个很好的特性在于返回的U是按照其特征值的大小排序的,排在前面的就是主方向,因此可以通过选取前几个特征向量来减少数据的维度。
白化:把各个特征轴上的数据除以对应特征值,从而达到在每个特征轴上都归一化幅度的结果。也就是在PCA的基础上再除以每一个特征的标准差,以使其归一化,其标准差就是奇异值的平方根。

具体python实现如下:

import numpy as np
import matplotlib.pyplot as plt
from numpy import randomx = random.rand(50,2)
# print(x)
plt.scatter(x[:,1],x[:,0],color="red")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()#***************PCA和白化***************#
x -= np.mean(x) # 去均值
cov = np.dot(x.T, x) / x.shape[0]   # 计算协方差矩阵得到相关性
U,S,V = np.linalg.svd(cov)         # 协方差矩阵奇异值分解
Xrot = np.dot(x, U)                    # 去相关
Xrot_reduced = np.dot(x,U[:,:100]) # 降维
plt.scatter(Xrot_reduced[:,1],Xrot_reduced[:,0], color = "green")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()
#白化数据
Xwhite = Xrot / np.sqrt(S + 1e-5)
plt.scatter(Xwhite[:,1],Xwhite[:,0], color = "purple")
new_ticks = np.linspace(-1, 1, 5)
plt.xticks(new_ticks)
plt.yticks(new_ticks)
plt.show()

随机初始化:

PCA处理后:

白化处理后:

注意:在进行数据的预处理时,只能在训练数据上进行,然后应用到验证/测试数据上。

深度学习数据预处理方法及示例相关推荐

  1. 比较全的深度学习数据预处理方法

    当前深度学习的预处理方法 1.中心化/零均值化 程序代码 2.标准化/归一化 程序代码 (1)标准化与归一化的联系和差异 联系 差异 (2)为什么要归一化/标准化 ①某些模型求解需要 ②一些分类器需要 ...

  2. 深度学习——数据预处理篇

    深度学习--数据预处理篇 文章目录 深度学习--数据预处理篇 一.前言 二.常用的数据预处理方法 零均值化(中心化) 数据归一化(normalization) 主成分分析(PCA.Principal ...

  3. 深度学习-----数据预处理

    转自:https://blog.csdn.net/dcxhun3/article/details/47999281 通过最近一段深度学习的学习与实现,发现数据预处理在深度学习中是非常重要的. 数据归一 ...

  4. 二、深度学习数据增强方法汇总

    深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...

  5. 系列文章(一):机器学习与深度学习——数据预处理(数值型数据)

    系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 目录 系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 一.引言 1.1 为何预处理(Why preprocessing? ...

  6. 深度学习数据增强方法,利用仿射变换实现图像进行各种操作如平移、缩放、旋转、翻转

    导读 在深度学习的数据增强中,我们经常需要对图像进行各种增强操作如平移.缩放.旋转.翻转等,这些其实都是图像的仿射变换.通过本篇文章,你能够知道它们的实现原理以及如何应用它们.本文讲述如何通过仿射变换 ...

  7. 深度学习数据预处理——批标准化(Batch Normalization)

    数据预处理最常见的方法就是中心化和标准化,中心化相当于修正数据的中心位置,实现方法非常简单,就是在每个特征维度上减去对应的均值,最后得到 0 均值的特征.标准化也非常简单,在数据变成 0 均值之后,为 ...

  8. 数据预处理方法整理(数学建模)

    这篇文章主要是整理了一些作者在各种建模比赛中遇到的数据预处理问题以及方法,主要针对excel或csv格式的数据,为后续进行机器学习或深度学习做前期准备 数据清洗 导入库和文件,这里使用的是绝对路径,可 ...

  9. 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)

    作者 | 黄浴 来源 | 转载自知乎专栏自动驾驶的挑战和发展 [导读]在近日发布的<值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(上)>一文中,作者介绍了一部分各大公司和机构基于 ...

最新文章

  1. EditPlus 3.5 版已经发布
  2. 2020 年最全 Python 面试题汇总 (五)
  3. python的断点调试
  4. C/C++判断操作系统(Win10,Win8.1WinServer等等)-完整源码及思路
  5. 《javascript高级程序设计》第八章 The Browser Object Model
  6. html增删改查按钮控件,HTML DOM节点的增删改查
  7. ./configure:command not found 解决方法
  8. SCCM 2012 SP1系列(一)先决条件准备-1
  9. Flink on K8s 在京东的持续优化实践
  10. Codeforces Round #453 (Div. 1)
  11. JQuery原生js ——实现剪刀石头布小游戏
  12. 【保证能用】Ubuntu创建一个正常权限的用户
  13. JAVA导入gpx文件_用于Java的GPX解析器?[关闭]
  14. Firefox Monitor - 在线免费检测邮箱数据是否泄露
  15. 前端面试基础题:请写出至少20个HTML5标签
  16. 矩阵迹(trace)与行列式(determinate)的一些性质
  17. 10大最毒路边小吃盘点,你常吃吗?
  18. 开源项目——小Q聊天机器人V1.1
  19. 解决Ubuntu 20.04 播放视频,因缺少编解码器无法处理音频/视频流,以及解决‘因没有公钥,无法验证下列签名’问题
  20. 无障碍键盘输入-搜狗输入法写数学公式

热门文章

  1. 查询WFS服务时添加筛选条件
  2. 苹果手机软件升级密码_免编程软件开发平台,可视化手机软件开发
  3. 关于解决无线路由器不稳定的方法备忘录
  4. 几种创建vue项目的方法
  5. 临床药理学|名词解释(考试后总结版)
  6. 好用的物流时效性查询API
  7. 使用正则替换Excel字符串
  8. 19-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(APP程序部分说明)
  9. 第三方设备对接小度音箱 记录
  10. python写csv文件分隔符问题_导出csv文件时,处理分隔符问题(转)