python数据预处理技术

python数据预处理技术

在真实世界中,经常需要处理大量的原始数据,这些原始数据是机器学习算法无法理解的。为了让机器学习算法理解原始数据,需要对数据进行预处理。

我们运行anaconda集成环境下的“jupyter notebook”命令来创建一个交互式笔记本,jupyter Notebook 有两种键盘输入模式。编辑模式,允许往单元中键入代码或文本;这时的单元框线是绿色的。命令模式,键盘输入运行程序命令;这时的单元框线是灰色。jupyter notebook常见的快捷方式如下:

Shift+Enter : 运行本单元,选中下个单元

Ctrl+Enter : 运行本单元

Alt+Enter : 运行本单元,在其下插入新单元

Y:单元转入代码状态

M:单元转入markdown状态

A :在上方插入新单元

B:在下方插入新单元

X:剪切选中的单元

Shift +V:在上方粘贴单元

来看看python是如何对数据进行预处理的。首先我们导入numpy和preprocessing这个包,并创建一些样本数据:

#导入依赖包

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]])

使用“Alt+Enter”键进行代码,接下来就可以对数据进行预处理了。数据可以通过许多技术进行预处理,接下来介绍一些最常用的预处理技术。

1、均值移除

通常我们会把每个特征的平均值移除,以保证特征均值为0(即标准化处理),这样做可以消除特征彼此间的偏差。代码如下:

#均值移除

data_standardized = preprocessing.scale(data)

print ("\nMean = ", data_standardized.mean(axis=0))

print ("Std deviation = ", data_standardized.std(axis=0))

输出结果如下:

Mean = [ 5.55111512e-17 -1.11022302e-16 -7.40148683e-17 -7.40148683e-17]

Std deviation = [ 1. 1. 1. 1.]

经过处理之后,数据特征均值几乎是0,而且标准差为1。

2、范围缩放

数据点中每个特征的数值范围可能变化很大,因此,有时将特征的数值范围缩放到合理的大是非常重要的。运行如下代码:

data_scaler= preprocessing.MinMaxScaler( feature_range=(0, 1))

data_scaled= data_scaler.fit_transform(data)

print ("\nmin max scaled data =", data_scaled)

输出结果如下:

min max scaled data = [[ 1. 0. 1. 0. ]

[ 0. 1. 0.41025641 1. ]

[ 0.33333333 0.87272727 0. 0.14666667]]

3、归一化

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

运行如下代码:

data_normalized= preprocessing.normalize(data, norm='l1')

print ("\nl1 normalized data =", data_normalized)

输出结果如下:

l1 normalized data = [[ 0.25210084 -0.12605042 0.16806723 -0.45378151]

[ 0. 0.625 -0.046875 0.328125 ]

[ 0.0952381 0.31428571 -0.18095238 -0.40952381]]

这个方法经常用于确保数据点没有因为特征的基本性质而产生较大差异,即确保数据处于同一数量级,提高不同特征数据的可比性。

4、二值化

二值化用于将数值特征向量转换为布尔类型向量。运行如下代码:

data_binarized= preprocessing.Binarizer(threshold=1. 4).transform(data)

print (" \nbinarized data=", data_binarized)

输出结果如下:

binarized data=',

[[ 1., 0., 1., 0.],

[ 0., 1., 0., 1.],

[ 0., 1., 0., 0.]]

如果已经对数据有了一定的了解,就会发现使用这个技术的好处了。

5、独热编码

通常,需要处理的数值都是稀疏地、散乱地分布在空间中,然而,我们并不需要存储这些大数值,这时就需要使用独热编码。可以把独热编码看作是一种收紧特征向量的工具。它把特征向量的每个特征与特征的非重复总数相对应,通过 one-of-k的形式对每个值进行编码。特征向量的每个特征值都按照这种方式编码,这样可以更加有效地表示空间。例如,我们需要处理4维向量空间,当给一个特性向量的第n个特征进行编码时,编码器会遍历每个特征向量的第n个特征,然后进行非重复计数。如果非重复计数的值是K,那么就把这个特征转换为只有一个值是1其他值都是0的K维向量。

运行以下代码:

encoder= preprocessing.OneHotEncode()

encoder.fit([[0,2,1,12],[1,3,5,3],[2,3,2,12],[1,2,4,3]])

encoded_vector= encoder.transform([[2, 3, 5, 3]]).toarray()

print ("\nEncoded vector=", encoded_vector)

输出结果如下:

Encoded vector:

[[ 0., 0., 1., 0., 1., 0., 0., 0., 1., 1., 0.]]

观察一下每个特征向量的第三个特征,分别是1、5、2、4这4个不重复的值,也就是说独热编码向量的长度是4。如果你需要对5进行编码,那么向量就是[0,1,0,01。向量中只有一个值是1。第二个元素是1,对应的值是5。

相关阅读:

《 》


分享到:


相關文章: