机器学习笔记——特征标准化

数据标准化是在特征处理环节必不可少的重要步骤。

数据标准化是为了消除不同指标量纲的影响,方便指标之间的可比性,量纲差异会影响某些模型中距离计算的结果。

常见标准化方法主要有归一化、正态化。

数据归一化也即0-1标准化,又称最大值-最小值标准化,核心要义是将原始指标缩放到0~1之间的区间内。相当于对原变量做了一次线性变化。

其公式为 EX = (x- min)/(max - min)

另一种常用的标准化方法是z-score标准化,将原始指标标准化为均值为0,标准化为1的正态分布。

EX = (x - mean)/σ

R语言中的特征标准化:

library("caTools")
library("scales")
data(iris)

split = sample.split(iris$Species,SplitRatio = .8)
train_data = subset(iris,split == TRUE)
test_data  = subset(iris,split == FALSE)

train_data[,-5] = apply(train_data[,-5],2,rescale,to = c(0,1))
test_data[,-5] = apply(test_data[,-5],2,rescale,to = c(0,1))

以上scales包中的rescale函数可以自动完成指标中0-1标准化的任务,事实上,它可以将原始指标线性变化到任何一个数字区间内。

我们可以来验证结果是否是可信的。

range(train_data[,1])
range(apply(train_data[,-5],2,rescale,to = c(0,1))[,1])

[1] 4.3 7.7
[1] 0 1

当然你也可以自己写一个叫简单的0-1标准化函数

scale1 = function(x){
(x - min(x))/(max(x) - min(x))
}
range(apply(train_data[,-5],2,scale1)[,1])
[1] 0 1

z-score标准化

z-score标准化可以通过scale函数快速实现。

train_data[,-5] = scale(train_data[,-5])

mean(train_data[,1]);sd(train_data[,1])
[1] 5.869167
[1] 0.8259241

mean(scale(train_data[,-5])[,1]);sd(scale(train_data[,-5])[,1])
[1] 0
[1] 1

#自定义一个z-score标准化函数
z_norm = function(x){
  (x - mean(x))/sd(x)
}

mean(apply(train_data[,-5],2,z_norm)[,1]);sd(apply(train_data[,-5],2,z_norm)[,1])
[1] 0
[1] 1

Python中sk-learn库中有专门用于处理以上两种标准化的函数。

from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pandas as pdimport numpy as np

iris  = load_iris()
data = iris['data']
iris_data = pd.DataFrame(
         data = data,
         columns = ['sepal_length','sepal_width','petal_length','petal_width']
        )
iris_data["Species"] = iris[ 'target']
iris_data["Species"] = iris_data["Species"].map({0:"setosa",1:"versicolor",2:"virginica"})
x,y = iris_data.iloc[:,0:-1],iris_data.iloc[:,-1]
train_data,_data,train_target,test_target = train_test_split(x,y,test_size = 0.2,stratify = y)

Python中的0-1标准化

min_max_scaler = preprocessing.MinMaxScaler() #实例化0-1标准化方法
X_train_minmax = min_max_scaler.fit_transform(test_data.iloc[:,0:4].values)
X_test_minmax  = min_max_scaler.transform(test_data.iloc[:,0:4].values)

X_train_minmax[:,0].max() - X_train_minmax[:,0].min()1.0

Python中的z-score标准化

训练集第一列的均值和方差如下

train_data.iloc[:,0].mean();train_data.iloc[:,0].std()
5.86166666666666
40.8416853174847874
sc_X = preprocessing.StandardScaler()     #实例化z-score标准化方法
X_train = sc_X.fit_transform(train_data.iloc[:,0:4].values)
X_test  = sc_X.transform(test_data.iloc[:,0:4].values)

标准化后第一列的均值和方差
X_train[:,0].mean();X_train[:,0].std()
-2.2907601741432396e-151.0

以上仅介绍了最常用的两种标准化特征的方法及其实现,标准化的方法还有很多,对于什么的模型需要使用标准化以及适用什么方法的标准化,需要视具体场景和数据量级差异而定,小编也在摸索中。

标准化一方面可以防止原始特征中量纲差异影响距离运算(比如欧氏距离的运算)。 另一方面标准化也可以在一定程度上提升算法求解的效率。

https://www.coursera.org/learn/machine-learning

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2018-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云时之间

深度学习与TensorFlow:FCN论文翻译(二)

Each layer of data in a convnet is a three-dimensional array of size h × w × d, ...

2042
来自专栏智能算法

深度学习三人行(第4期)---- TF训练DNN之进阶

2558
来自专栏人工智能

卷积神经网络学习笔记

1.卷积神经网络的图像识别原理: 通过过滤函数 来描绘出图像的边界: 过滤函数和图像相同区域的数值进行相乘,得到新的图像, 新图像则只剩下边图像。 cros...

25910
来自专栏AI科技评论

开发 | Keras版faster-rcnn算法详解(RPN计算)

AI科技评论按:本文首发于知乎专栏Learning Machine,作者张潇捷, AI科技评论获其授权转载。 前段时间学完Udacity的机器学习和深度学习的课...

61611
来自专栏贾志刚-OpenCV学堂

VGG卷积神经网络模型解析

一:VGG介绍与模型结构 VGG全称是Visual Geometry Group属于牛津大学科学工程系,其发布了一些列以VGG开头的卷积网络模型,可以应用在人脸...

4404
来自专栏智能算法

SVM 的“核”武器

一、上一次我们讲到关于SVM通过拉格朗日乘子法去求解的部分,引入乘子 得到下面的式子: ? 我们令 ? 当所有的约束条件满足时,我们得到的 ? ,而之前的优...

3346
来自专栏CVer

深度学习的卷积算法指南[1] 卷积和池化简介

本文简要回顾了卷积神经网络(CNN)的主要组成部分,即离散卷积(discrete convolutions)和池化(pooling)。

3905
来自专栏红色石头的机器学习之路

台湾大学林轩田机器学习技法课程学习笔记14 -- Radial Basis Function Network

上节课我们主要介绍了Deep Learning的概念。Deep Learing其实是Neural Networ的延伸,神经元更多,网络结构更加复杂。深度学习网络...

2340
来自专栏人工智能

深度学习入门笔记(2)-线性回归 Linear Regression with autograd

一同前行! 假设我们有一个曲线(或者平面)y=wx+b 我们给定它一个特定的w,和b w = [2,51] b = 21.2 即y=2x1+51x2+21.2 ...

2609
来自专栏深度学习那些事儿

利用pytorch实现神经网络风格迁移Neural Transfer

载入图像输入大小无要求,最终会被剪裁到相同大小,这是因为神经网络设计了一个特定的输入大小,因此内容图像和风格图像必须大小一致。

3132

扫码关注云+社区