python_处理数据

处理数据array_like:list,numpy_array,DataFramebaseline:一个基础模型,算法提升的参照物。可以以此为基准来比较对模型的改进是否有效。通常在一些竞赛或项目中,baseline就是指能够顺利完成数据预处理、基础的特征工程、模型建立以及结果输出与评价,然后通过深入进行数据处理、特征提取、模型调参与模型提升或融合,使得baseline可以得到改进。所以这个没有明确的指代,改进后的模型也可以作为后续模型的baseline。文章目录处理数据标准化/归一化:让每个特征重要
摘要由CSDN通过智能技术生成

处理数据

array_like:list,numpy_array,DataFrame
baseline:一个基础模型,算法提升的参照物。可以以此为基准来比较对模型的改进是否有效。通常在一些竞赛或项目中,baseline就是指能够顺利完成数据预处理、基础的特征工程、模型建立以及结果输出与评价,然后通过深入进行数据处理、特征提取、模型调参与模型提升或融合,使得baseline可以得到改进。所以这个没有明确的指代,改进后的模型也可以作为后续模型的baseline。

直方图均衡

亮度直方图:图像中亮度分布的图表。

在横轴上表示亮度值从黑色到白色;在竖轴上表示某一亮度所累积的像素数量。这里的亮度值指的是灰度等级,范围一般从 0 到 255,0 表示黑色,255 表示白色。
在这里插入图片描述

直方图均衡:图片中的亮度进行均衡,提高图像全局对比度,使亮的地方更亮,暗的地方更暗。

一个好图片是包含0~25所有的亮度值,第一个图片,其亮度范围没有全部使用

使用场景

常被用于背景和前景都太亮或者太暗的图像。

实现方式

https://www.jianshu.com/p/726b7b284ef3

标准化/归一化:让每个特征重要性一样,消除量纲

eg: 2个人体重差10kg,身高差0.2cm,衡量差别时,体重的差距会把身高的差距掩盖掉。

在这里插入图片描述

  1. 归一化:将原始数据某一列数值特征的值缩放到[0,1],改变了原始数据分布(分布种类和分布形状都可能会变)
    x ∗ = x − x m i n x m a x − x m i n x^*=\frac{x-x_{min}}{x_{max}-x_{min}} x=xmaxxminxxmin
  2. 标准化:将原始数据的某一列进行缩放,使其均值为0,标准差为1,改变原始数据的分布(均值和标准差都变了),但不改变原始数据的分布种类(正太分布标准化后还是正太分布;卡方分布标准化后还是卡方分布):当原始数据是正太分布时标准化后是标准正太分布。
    x ∗ = x − x ‾ σ     s t d = σ x^*=\frac{x-\overline{x}}{\sigma} ~~~std=\sigma x=σxx   std=σ
共同点:数据缩放
  • 消除量纲,提高模型精度
    当计算"距离"时,如PCA、KNN、Kmeans,会使得过于依赖量纲大的特征
  • 梯度下降求解最优化时,加快模型训练速度:
    y = w 1 x 1 + w 2 x 2 , 损 失 函 数 为 凸 函 数 时 , 损 失 在 w 1 O w 2 平 面 的 投 影 得 到 的 等 高 线 图 【 见 梯 度 】 : 中 心 圈 损 失 最 低 , 梯 度 方 向 与 等 高 线 切 线 垂 直 , 并 指 向 损 失 升 高 的 方 向 【 即 由 中 心 向 外 】 y=w_1x_1+w_2x_2,损失函数为凸函数时,损失在w_1Ow_2平面的投影得到的等高线图【见梯度】:中心圈损失最低,梯度方向与等高线切线垂直,并指向损失升高的方向【即由中心向外】 y=w1x1+w2x2w1Ow2线线线
    训练方向朝着梯度的反方向,即垂直等高线的切线,指向圆圈中心,当量纲不一致时,训练反复跌宕
    由于x2的量纲较小,所以损失在w2的方向上变化较小
    在这里插入图片描述
    在这里插入图片描述
区别

归一化改变了原始数据分布,标准化没有改变
归一化后的数据[0,1],标准化后数据没有实际范围
归一化的缩放只与最大值、最小值有关,标准化的缩放与每个点都有关,通过方差体现

如何应用

当对数据有严格要求时,用归一化
数据稳定,用归一化
机器学习时,标准化更通用
数据不稳定时,有极端值,使用标准化,减少极端值的影响(因为归一化的缩放与最大值最小值有关)
在分类、聚类算法中,需要使用距离来度量相似性的时候,或使用PCA技术进行降维的时候,标准化表现更好。

•归一化和标准化的相同点都是对某个特征(column)进行缩放(scaling)而不是对某个样本的特征向量(row)进行缩放。对特征向量进行缩放是毫无意义的(暗坑 1)  比如三列特征:身高、体重、血压。每一条样本(row)就是三个这样的值,对这个 row 无论是进行标准化还是归一化都是好笑的,因为你不能将身高、体重和血压混到一起去!
•在线性代数中,将一个向量除以向量的长度,也被称为标准化,不过这里的标准化是将向量变为长度为 1 的单位向量,它和我们这里的标准化不是一回事儿,不要搞混哦(暗坑 2)。
•逻辑回归,如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。(暗坑 3)

#标准化,返回numpy数组
from sklearn.preprocessing import StandardScaler
#第一标准化,直接返回标准化后的结果,没有保存特征均值和方差
StandardScaler().fit_transform(array_like)
#第二种标准化,保存有特征均值和方差,可用于标准化其他数据
scaler=StandardScaler().fit(array_like)
scaler.transform(array_like)

StandardScaler(copy=True, with_mean=True, with_std=True)
'''
copy:为Falas时,用归一化的值代替原来的值,可减少内存的使用,但当被被标准化的数据不是np.array或或scipy.sparse CSR matrix, 原来的数据还是被copy而不是被替代

with_mean: 在处理sparse CSR或者 CSC matrices 一定要设置False不然会超内存
'''
          
scaler.get_params(deep=True))#返回设置的参数 
	 {
   ‘with_mean’: True, ‘with_std’: True, ‘copy’: True}
scaler.scale_#缩放比例,同时也是标准差
scaler.mean_#每个特征的均值
scaler.var_#每个特征的方差
scaler.n_sample_seen_#样本数量

评价指标原则

metrics中所有的方法,都是高的值效果>低的值
metrics.accuract_score等以_score结尾的都是值越高越好
metrics.mean_squared_error等以_error结尾的都是值越小越好,所以会返回其负值,'neg_mean_squared_error',使得最后的结果是值高的更好
mse:’neg_mean_squared_error',metrics.mean_squared_error
mae:’neg_mean_absolute_error',metrics.mean_absolute_error

批标准化 batch normalization

内部协变量转移 Internal Covariate Shift ICS

训练过程中,因为前面层的参数更新时,后面每层输入的分布会发生变化

ICS带来的问题
  1. 网络学习速度慢:y=wx,训练过程中通过反向传播更新w时,如果x也变化,w在更新时还要适应x的变化,使得模型训练时更困难,难以收敛。此时为了模型的稳定性和收敛性,通常采用较小的学习率和参数的谨慎初始化,较小的学习率导致学习速度慢。
  2. 梯度消失:常见的激活函数大都是饱和函数,softmax,sigmoid,tanh两端饱和,relu则一端饱和。当数据落在饱和区时,梯度为0,多层网络一直传导,导致学习不到东西。
批标准化:解决训练时,网络中间层数据分布改变的问题(中间层ICS)

以batch为单位,input批标准化后再进入第一层网络,之后每层的激活函数前使用批标准化。

原理

在这里插入图片描述

在这里插入图片描述
b a t c h : B = { x 1.. m } 一 批 m 个 样 本 , 一 个 样 本 有 k 维 ( k 个 特 征 ) 步 骤 1 : 以 b a t c h 为 单 位 对 每 个 维 度 ( 特 征 ) 进 行 标 准 化 μ B ( k ) ← 1 m ∑ i = 1 m x i ( k ) / / m i n i − b a t c h − m e a n σ B ( k ) 2 ← 1 m ∑ i = 1 m ( x i ( k ) − μ B ( k ) ) 2 / / m i n i − b a t c h − v a r i a n c e x ^ i ( k ) ← x i ( k ) − μ B ( k ) σ B ( k ) 2 + ϵ / / n o r m a l i z e   ϵ 是 个 很 小 的 数 , 避 免 分 母 为 0 步 骤 2 : 加 权 重 构 步 骤 1 标 准 化 后 , 使 得 数 据 都 落 在 激 活 函 数 的 敏 感 区 ( 因 为 均 值 为 0 , 标 准 差 为 1 ) , 即 线 性 区 , 相 当 于 降 低 了 激 活 函 数 的 非 线 性 能 力 , 为 了 增 强 表 达 能 力 , 引 入 可 学 习 的 参 数 γ , β ( 会 在 反 向 传 播 时 更 新 ) 让 数 据 落 在 激 活 函 数 的 饱 和 区 , 添 加 模 型 的 非 线 性 y i ( k ) ← γ ( k ) x ^ i ( k ) + β ( k ) ≡ B N γ ( k ) , β ( k ) ( x i ( k ) ) / / s c a l e − a n d − s h i f t 由 步 骤 一 可 知 : x i ( k ) = σ ( k ) x ^ i ( k ) + μ ( k ) 当 γ ( k ) = σ ( k ) 同 时 β ( k ) = μ ( k ) , 有 : y i ( k ) = x i ( k ) , 此 时 标 准 化 + 加 权 重 构 后 的 数 据 同 操 作 前 一 样 , 数 据 又 会 落 到 激 活 函 数 的 饱 和 区 ( 非 线 性 区 ) , 是 否 要 这 样 , 在 训 练 中 , 让 网 络 在 反 向 传 播 时 自 己 根 据 损 失 决 定 batch:B=\{x_{1..m}\} 一批m个样本,一个样本有k维(k个特征)\\ 步骤1:以batch为单位对每个维度(特征)进行标准化\\ \mu_{\mathcal{B}}^{(k)} \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_{i}^{(k)} // mini-batch-mean\\ \sigma_{\mathcal{B^{(k)}}}^{2} \leftarrow \frac{1}{m} \sum_{i=1}^{m}\left(x_{i}^{(k)}-\mu_{\mathcal{B}}^{(k)}\right)^{2} // mini-batch-variance\\ \widehat{x}_{i}^{(k)} \leftarrow \frac{x_{i}^{(k)}-\mu_{\mathcal{B}}^{(k)}}{\sqrt{\sigma_{\mathcal{B^{(k)}}}^{2}+\epsilon}} // normalize ~\epsilon是个很小的数,避免分母为0\\ 步骤2:加权重构\\ 步骤1标准化后,使得数据都落在激活函数的敏感区(因为均值为0,标准差为1),\\ 即线性区,相当于降低了激活函数的非线性能力,为了增强表达能力,引入可学习的参数\gamma, \beta(会在反向传播时更新)让数据落在激活函数的饱和区,添加模型的非线性\\ y_{i}^{(k)} \leftarrow \gamma^{(k)} \widehat{x}_{i}^{(k)}+\beta^{(k)} \equiv \mathrm{B} \mathrm{N}_{\gamma^{(k)}, \beta^{(k)}}\left(x_{i}^{(k)}\right) // scale -and -shift\\ 由步骤一可知:x_i^{(k)}=\sigma^{(k)} \widehat{x}_{i}^{(k)}+\mu^{(k)}\\ 当 \gamma^{(k)}=\sigma^{(k)}同时\beta^{(k)}=\mu^{(k)},有:y_{i}^{(k)}=x_i^{(k)},此时标准化+加权重构后的数据同操作前一样,数据又会落到激活函数的饱和区(非线性区),是否要这样,在训练中,让网络在反向传播时自己根据损失决定\\

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值