数据标准化

Batch normalization批标准化

心已入冬 提交于 2019-12-11 14:40:51
Batch normalization 深度学习尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果,但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift。 机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BatchNorm的作用就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的(标准正态分布)。 Internal covariate shift 的概念:训练深度网络的时候经常发生训练困难的问题,因为,每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要是分布一直在变,学习就很难了),此现象称之为Internal Covariate Shift。 对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的

09 线性回归及矩阵运算

南楼画角 提交于 2019-12-06 16:03:43
线性回归 定义:通过一个或者多个自变量与因变量之间进行建模的回归分析。其中可以为一个或者多个自变量之间的线性组合。 一元线性回归:涉及到的变量只有一个 多元线性回归:变量两个或以上 通用公式:h(w) = w0 + w1x1 + w2x2 + ....= wTx 其中w,x 为矩阵:wT=(w0, w1, w2) x=(1,x1, x2)T 回归的应用场景 (连续型数据) 房价预测 销售额预测 (广告,研发成本,规模等因素) 贷款额度 线性关系模型 定义: 通过属性 (特征) 的线性组合来进行预测的函数: f(x) = w1x1 + w2x2 + w3x3 + ...... + wdxd + b w : weight (权重) b: bias (偏置项) 多个特征: (w1:房子的面积, w2:房子的位置 ..) 损失函数(误差) 《统计学习方法》 - 算法 ,策略, 优化 线性回归, 最小二乘法,正规方程 & 梯度下降 损失函数(误差大小) yi 为第i个训练样本的真实值 hw(xi)为第i个训练样本特征值组合预测函数 (预测值) 寻找最优化的w 最小二乘法之 正规方程 (直接求解到最小值,特征复杂时可能没办法求解) 求解:w= (xTx)-1 xTy X 为特征值矩阵,y为目标值矩阵 缺点: 特征过于复杂时,求解速度慢 最小二乘法之 梯度下降 使用场景

标准化和归一化(综合)

假装没事ソ 提交于 2019-12-06 13:07:06
part1: 【转】https://blog.csdn.net/weixin_40165004/article/details/89080968 Weka数据预处理(一) 对于数据挖掘而言,我们往往仅关注实质性的挖掘算法,如分类、聚类、关联规则等,而忽视待挖掘数据的质量,但是高质量的数据才能产生高质量的挖掘结果,否则只有"Garbage in garbage out"了。保证待数据数据质量的重要一步就是数据预处理(Data Pre-Processing),在实际操作中,数据准备阶段往往能占用整个挖掘过程6~8成的时间。本文就weka工具中的数据预处理方法作一下介绍。 Weka的数据预处理又叫数据过滤,他们可以在weka.filters中找到。根据过滤算法的性质,可以分为有监督的(SupervisedFilter)和无监督的(UnsupervisedFilter)。对于前者,过滤器需要设置一个类属性,要考虑数据集中类的属性及其分布,以确定最佳的容器的数量和规模;而后者类的属性可以不存在。同时,这些过滤算法又可归结为基于属性的(attribute)和基于实例的(instance)。基于属性的方法主要是用于处理列,例如,添加或删除列;而基于实例的方法主要是用于处理行,例如,添加或删除行。 数据过滤主要解决以下问题(老生常谈的): 数据的缺失值处理、标准化、规范化和离散化处理。

《机学五》KNN算法及实例

二次信任 提交于 2019-12-06 04:31:52
一、概述 【定义】如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 二、距离计算公式 两个样本的距离可以通过如下公式计算,又叫【欧式距离】 设有特征,a(a1,a2,a3),b(b1,b2,b3),那么: \[\sqrt{(a1-b1)^{2}+(a2-b2)^{2}+(a3-b3)^{2}}\] 三、sklearn k-近邻算法API sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto') n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数 algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法: ‘ball_tree’将会使用 BallTree ‘kd_tree’将使用 KDTree ‘auto’将尝试根据传递给fit方法的值来决定最合适的算法 (不同实现方式影响效率) 四、实战 数据位置: https://www.kaggle.com/c/facebook-v-predicting-check-ins/data 五、数据的处理 1、缩小数据集范围 DataFrame.query() 2、处理日期数据 pd.to

keras学习笔记(三)

我是研究僧i 提交于 2019-12-05 10:36:46
数据归一化 通过上次对cifar10数据集分类的任务,我的分类精度在0.79,但是当我对输入的数据做了归一化后,精度达到了0.99,实现的语句如下: X_train = X_train.astype('float32')/255 X_test = X_test.astype('float32')/255 Y_train =Y_train.reshape(Y_train.shape[0])/10 Y_test = Y_test.reshape(Y_test.shape[0])/10 对输入进行归一化处理。对标签也进行归一化处理。是数据预处理的一种常见的手段。 数据归一化与标准化存在一定区别,归一化是数据标准化的一种典型做法,即将数据统一映射到[0,1]区间上. 数据的标准化是指将数据按照比例缩放,使之落入一个特定的区间. 归一化最明显的在神经网络中的影响有如下几个方面: 1.有利于初始化的进行 2.避免给梯度数值的更新带来数字的问题 3.有利于学习率的调整 4.加快寻找最优解的速度 上篇博客说了上面那段是自己写的,下面那段是网上别人写的。我自己写的进行了标准化前是0.79的精度,标准化后是0.99的精度,很显然看出数据标准化对精度是有一定影响的。但是后面的那段我并没有看到有数据归一化,结果仍然能达到0.99.暂时还不清楚原因。可能是我选用了不同的损失函数的原因吧,可以自己进行更改验证

批标准化 (Batch Normalization)

故事扮演 提交于 2019-12-05 06:52:40
普通数据标准化 Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法, 也是优化 神经网络的一种方法. 具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律. 每层都做标准化 在神经网络中, 数据分布对训练会产生影响. 比如某个神经元 x 的值为1, 某个 Weights 的初始值为 0.1, 这样后一层神经元 计算结果就是 Wx = 0.1; 又或者 x = 20, 这样 Wx 的结果就为 2. 现在还不能看出什么问题, 但是, 当我们加上一层激励函数, 激活这个 Wx 值的时候, 问题就来了. 如果使用 像 tanh 的激励函数, Wx 的激活值就变成了 ~0.1 和 ~1, 接近于 1 的部已经 处在了 激励函数的饱和阶段, 也就是如果 x 无论再怎么扩大, tanh 激励函数输出值也还是 接近1. 换句话说, 神经网络在初 始阶段已经不对那些比较大的 x 特征范围 敏感了. 这样很糟糕, 想象我轻轻拍自己的感觉和重重打自己的感觉居然没什么 差别, 这就证明我的感官系统失效了. 当然我们是可以用之前提到的对数据做 normalization 预处理, 使得输入的 x 变化范围 不会太大, 让输入值经过激励函数的敏感部分. 但刚刚这个不敏感问题不仅仅发生在神经网络的输入层, 而且在隐藏层中也经常会发生. 只是时候

keras 自带数据的标准化方法

匿名 (未验证) 提交于 2019-12-03 00:25:02
1. featurewise_center:布尔值,使输入数据集去中心化(均值为0), 按feature执行。 2. samplewise_center:布尔值,使输入数据的每个样本均值为0。 3. featurewise_std_normalization:布尔值,将输入除以数据集的标准差以完成标准化, 按feature执行。 4. samplewise_std_normalization:布尔值,将输入的每个样本除以其自身的标准差。 从源码来解读: if self.samplewise_center: x -= np.mean(x, keepdims=True) #减去每个批次feature的平均值实现0中心化 if self.samplewise_std_normalization: x /= (np.std(x, keepdims=True) + K.epsilon()) #除以每个批次feature的标准差 if self.featurewise_center: self.mean = np.mean(x, axis=(0, self.row_axis, self.col_axis)) #在底层为tendorflow时这里#self.row_axis=1,self.col_axis=2,即axis(0,1,2)。因为x是一个4维np,最后一维即图像的通道数,所

数学基础-数据预处理

匿名 (未验证) 提交于 2019-12-03 00:22:01
数据是多种多样的,包括数字、文本、图像、音频、视频。本文介绍数字类型数据预处理方法。 数据预处理对于模型的准确度至关重要,数据预处理过程需要结合领域知识和分析目标,分析数据中存在的问题并采取有效的处理方法。 数字类型数据 数字类型数据包括分类型、数值型。 分类类型数据 分类变量是说明事物类别的名称,是有一定个数取值的变量类型,分类变量包括无序类型和有序类型。例如性别就是一个无序分类变量,它的取值为男或女;等级是一个有序分类变量,它的取值为一级、二级、三级… 分类类型数据的编码方法 序数法: 用整数编码每个类别,如果分类变量是有序型,那么对应的数值也是有序的,如果分类数据是无序的,那么每个类别对应的数值是随机的,但是整数本身属于有序数值,有大小之分,用于编码无序的分类数据显然存在不合理性。(类别数据的编码方法的合理性也取决于解决问题的模型,比如决策树、朴素贝叶斯,这两种分类方法分析的是数据出现的次数,不关心数据值的大小,所以序数法是可行的;而像基于距离计算的方法,SVM、KNN等序数法并不适用) One-Hot法: 又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。例如类别数据[中国,美国,日本],那么中国的编码为1,0,0 二进制法: 分类类别数据先按照序数法进行编码,然后将序数转化为二进制编码

数据处理中的归一化、标准化(Standardization)、中心化和正则化(Normalization)区别详解

匿名 (未验证) 提交于 2019-12-03 00:11:01
利用数据集对机器学习或深度学习模型进行训练前要对数据进行预处理,除了数据清洗(如处理数据缺失、数据异常等问题),还有一类数据预处理的方法经常用到,即数据的归一化、标准化和正则化等。作者在浏览了大量网上资料发现,很多人对这些概念不是很清楚,甚至有些机器学习和人工智能领域的培训老师也对这几个概念有些模糊。本文将详细介绍标题中所举的几个概念的意思,希望对大家的学习有所帮助! (1)归一化 归一化是数据scaling(缩放)中的一种,是把数据缩放到[0,1]或[-1,1]之间。常用的数据归一化方法是线性函数归一化,公式为: x’ = (x - X_min) / (X_max - X_min) 利用sklearn库实现方法为:(以鸢尾花数据集为例,下同) from sklearn . preprocessing import MinMaxScaler MinMaxScaler (). fit_transform ( iris . data ) 这种方法可将数据scaling到[0,1]之间,此外还有平均归一化和非线性归一化等,其中平均归一化公式如下: x’ = (x - μ) / (MaxValue - MinValue) 非线性归一化如下: 对数函数scaling:y = log10(x) 反余切函数scaling:y = atan(x) * 2 / π (2)标准化

数据预处理PCA,标准化

匿名 (未验证) 提交于 2019-12-02 23:05:13
1.PCA from sklearn.decomposition import RandomizedPCA # 100维度 n_components = 100 pca = RandomizedPCA(n_components=n_components, whiten=True).fit(x_train) # 将降维的再调回去 eigenfaces = pca.components_.reshape((n_components, h, w)) # 特征提取 x_train_pca = pca.transform(x_train) x_test_pca = pca.transform(x_test) 2.标准化 from sklearn import preprocessing import numpy as np X = np.array([[ 1., -1., 2.],[ 2., 0., 0.],[ 0., 1., -1.]]) scaler= preprocessing.MinMaxScaler(feature_range=(-1, 1)).fit(X) X_scaled = scaler.transform(X) # 将标准化的数据转化为原数据 X1=scaler.inverse_transform(X_scaled)