-数据预处理技术(均值移除,范围缩放,归一化,二值化,独热编码)

1. 均值移除(Mean removal)

去除均值和方差进行缩放。(均值为0,标准差为1)机器学习

  代码展现:工具

import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
data_standardized=preprocessing.scale(data) #0均值处理
print(data_standardized.shape)
print('Mean={}'.format(data_standardized.mean(axis=0))) #对列求均值(浮点计算有偏差,接近0)
print('Mean2={}'.format(np.mean(data_standardized,axis=0))) #对列求均值(浮点计算有偏差,接近0)
# axis:int类型,初始值为0,axis用来计算均值 means 和标准方差 standard deviations.
# 若是是0,则单独的标准化每一个特征(列),若是是1,则标准化每一个观测样本(行)。
print('标准化后: ')
print(data_standardized)
print('标准差={}'.format(np.std(data_standardized,axis=0)))学习

 

1, 值移除以后的矩阵每一列的均值约为0,而std为1。这样作的目的是确保每个特征列的数值都在相似的数据范
围之间,防止某一个特征列数据自然的数值太大而一家独大。
2, 能够直接调用preprocessing模块中成熟的 方法来对一个numpy 矩阵进行均值移除。
3, 求一个numpy矩阵的平均值(或std,min,max等)至少有两种方法,如代码中第9行和第10行所示。编码

 

2. 范围缩放(Scaling)

必要性:数据点中每一个特征列的数值范围可能变化很大,所以,有时须要将特征列的数值范围缩放到合理的大小。spa

代码展现:code

import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
data_scaler=preprocessing.MinMaxScaler(feature_range=(0,1)) # 缩放到(0,1)之间
data_scaled=data_scaler.fit_transform(data)
print('scaled matrix: *********************************')
print(data_scaled)orm

3. 归一化(Normalization)

用于须要对特征向量的值进行调整时,以保证每一个特征向量的值都缩放到相同的数值范围。机器学习中最经常使用的归
一化形式就是将特征向量调整为L1范数,归一化就是L1/L2为1rem

  范数

给定向量x=(x1,x2,...xn)
L1范数:向量各个元素(向量份量)绝对值之和
L2范数:向量各个元素(向量份量)的平方求和而后求平方根it

代码展现:io

import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
data_L1_normalized=preprocessing.normalize(data,norm='l1')
print('L1 normalized matrix: *********************************')
print(data_L1_normalized)
print('sum of matrix: {}'.format(np.sum(data_L1_normalized)))
data_L2_normalized=preprocessing.normalize(data,norm='l2') # 默认:l2
print('L2 normalized matrix: *********************************')
print(data_L2_normalized)
print('sum of matrix: {}'.format(np.sum(data_L2_normalized)))

 

1,Normaliztion以后全部的特征向量的值都缩放到同一个数值范围,能够确保数据点没有由于特征的基本性质而
产生的较大差别,即确保全部数据点都处于同一个数据量,提升不一样特征数据的可比性。
2,注意和均值移除的区别:均值移除是对每个特征列都缩放到相似的数值范围,每个特征列的均值为0,而
Normalization是将全局全部数值都缩放到同一个数值范围。

 

4. 二值化(Binarization)

二值化用于将数值特征向量转换为布尔类型向量。

代码展现:

import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
data_binarized=preprocessing.Binarizer(threshold=1.4).fit_transform(data) #小于等于 threshold 为
0
print('binarized matrix: *********************************')
print(data_binarized)

 

1,二值化以后的数据点都是0或者1,因此叫作二值化。
2,计算方法是,将全部大于threshold的数据都改成1,小于等于threshold的都设为0。
3,常常用于出现某种特征(好比设为1),或者没有出现某种特征(设为0)的应用场合

 

5. 独热编码(One-Hot Encoding)

一般,须要处理的数值都是稀疏地,散乱地分布在空间中,但咱们并不须要存储这些大数值,这时就须要使用独热
编码,独热编码其实是一种收紧特征向量的工具

代码展现:

import numpy as np

from sklearn import preprocessing

data=np.array([[0,2,1,12],
[1,3,5,3],
[2,3,2,12],
[1,2,4,3]]) # 原始数据矩阵 shape=(4,4)
encoder=preprocessing.OneHotEncoder()
encoder.fit(data)
encoded_vector=encoder.transform([[2,3,5,3]]).toarray()
print('one-hot encoded matrix: *********************************')
print(encoded_vector.shape)
print(encoded_vector)

 

1,独热编码能够缩小特征向量的维度,将稀疏的,散乱的数据集(好比代码块中的data,shape=(4,4))收缩为
11维致密矩阵(如输出结果,shape=(1,11))。
2,编码方式为:根据原始数据集data构建编码器encoder,用编码器来对新数据进行编码。好比,第0列有三个
不一样值(0,1,2),故而有三个维度,即0=100,1=010,2=001;同理,第1列有两个不一样值(2,3),故而只有两
个维度,即2=10,3=01;同理,第2列有四个不一样值(1,5,2,4),故而有四个维度,即1=1000,
2=0100,4=0010,5=0001同理,第3列有两个不一样值(3,12),故而只有两个维度,即3=10,12=01。因此在面对
新数据[[2,3,5,3]]时,第0列的2就对应于001,第二列的3对应于01,第三列的5对应于0001,第四列的3对应于
10,链接起来后就是输出的这个(1,11)矩阵,即为读了编码后的致密矩阵。
3,若是面对的新数据不存在上面的编码器中,好比[[2,3,5,4]]时,4不存在于第3列(只有两个离散值3和12),则
输出为00,链接起来后是[[0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0.]],注意倒数第二个数字变成了0

 

6.数据离散化

做用:将连续型数据离散化

代码展现:

ages = [20,33,54,23,66,77,88,99,26,63]
bins = [18,25,35,60,100]
labels = ['少年','青年','中年','老年']
new_ages = pd.cut(x=ages,bins=bins,labels=labels,retbins=True)#retbins:返回bins
print(new_ages)

 

有不懂的地方能够联系做者

相关文章
相关标签/搜索