长文详解Python数据预处理,快收藏!
今日份知识你摄入了么?
在本文中,我们将学习一些重要的数据预处理方法。对数据进行可视化处理,并把数据转换为合适的格式,是非常重要的一步,这样估算器(算法)才能够很好到拟合,从而达到良好的准确度。
数据预处理方法图
本文会涉及到的主题有:
标准化(Standardization)
稀疏数据(sparse data)和离群值(outliers)的Scaling
数据标准化(Normalization)
分类编码(Categorical Encoding)
缺失值处理(Imputation)
标准化(Standardization)
标准化是处理数据点的平均值和标准差的过程。作为原始数据,值可能从非常低到非常高的都有。因此,为了避免模型中的性能低下,我们选择使用标准化。这表示,平均值会变为零,而标准差会变为一个单位。
标准化的公式如下所示:
z = (feature_value — mean)/standard deviation
典型均匀分布图的示例
当我们使用一个算法来配合我们的数据时,它会假定数据都居中,并且所有特征的方差顺序是相同的,否则估算器将无法做到正确预测。
Sklearn 这个library里,有一个在预处理类时用StandardScaler来标准化数据集的方法。
我们要用到import指令在python中使用此功能。
#Before modeling our estimator we should always some preprocessing scaling.在对估算器建模之前,我们应始终做一些Scaling的预处理。
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
稀疏数据(sparse data)和离群值(outliers)的Scaling
稀疏数据的Scaling:
数据Scaling是把特征值转换到“ 0” 到 “ 1”的某个范围内的一种方法。有两种方法可以做到这一点,它们是MinMaxScaler和MaxAbsScaler。
import numpy as np
X_train = np.array([[ 1., 0., 2.], [ 2., 0., -1.], [ 0., 2.,
-1.]])from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler() X_train_minmax = min_max_scaler.fit_transform(X_train) print(X_train_minmax) #output:
array([[0.5, 0. , 1. ],
[1. , 0. , 0. ],
[0. , 1. , 0. ]])
python示例
你可以看到,输入值会保持在“ 0” 到 “ 1”之间。
对稀疏数据中心做Scaling可能不是一个好方法,因为它可能会更改数据的结构。因此,最好对在不同比例上都有值的原始数据进行Scaling。
离群值的Scaling:
当原始数据中有很多离群值时,用平均值和方差做Scaling就不能很好地处理这些数据。因此,由于离群值受到平均值和方差的影响,我们必须使用更稳健的方法,如四分位距法(IQR)。IQR的范围落在25%到75%之间,其中除去了中位数,并在分位数范围做Scaling。
RobustScaler需要一些参数来执行Scaling。
第一个参数是with_centering,如果为true,它会在Scaling前将数据居中。
第二个参数with_scaling,如果为true,它会在分位数范围内Scale数据。
from sklearn.preprocessing import RobustScaler
X = [[ 1., 0., 2.], [ 2., 0., -1.], [ 0., 2., -1.]]
transformer = RobustScaler().fit(X)
transformer.transform(X)
#output:
array([[ 0., 0., 2.],
[ 1., 0., 0.],
[-1., 2., 0.]])
python示例
数据标准化(Normalization)
Scaling过程,是将数据值规范化为一个单位标准。MinMaxScaler是标准化的一个例子。当我们成对地处理二次形式时,这个过程很有用,它可以基于内核(kernel-based)或者基于向量点积(dot product-based)。
基于向量空间模型vector space model(即与文本数据样本相关的向量)来简化数据过滤也很有用。
有两种类型的标准化,如下所示:
标准化:它将输入的向量scale为一个单位标准。标准参数用来规范化所有的非零值。它使用三个参数:L1,L2和max,其中L2是默认标准。
标准器:它也执行和上述相同的操作,但是在此过程中,配合数据的方法是可选的。
from sklearn.preprocessing import normalize
X = [[ 1., 0., 2.], [ 2., 0., -1.], [ 0., 2., -1.]]
X_normalized = normalize(X, norm=’l2')
print(X_normalized)
#output:
array([[ 0.4472136 , 0. , 0.89442719],
[ 0.89442719, 0. , -0.4472136 ],
[ 0. , 0.89442719, -0.4472136 ]])
python示例
from sklearn.preprocessing import Normalizer
X = [[ 1., 0., 2.], [ 2., 0., -1.], [ 0., 2., -1.]] normalizer = preprocessing.Normalizer().fit(X) normalizer.transform(X) #output:
array([[ 0.4472136 , 0. , 0.89442719],
[ 0.89442719, 0. , -0.4472136 ],
[ 0. , 0.89442719, -0.4472136 ]])
标准器示例
标准器在初始阶段时,在数据处理的管道中很有用。
当我们使用稀疏输入(sparse input)时,请一定把它转换为非CSR格式,来避免它复制多个内存,这一点很重要。CSR是压缩的稀疏行位(Sparse Rows),这个功能在scipy.sparse.csr_matrix中。
分类编码(Categorical Encoding)
我们得到一些原始数据时,可能会遇到某些列是不连续的,而是类别的二进制或存在多个类别的情况。因此,为了使它们转为整数,我们要使用到编码的方法。以下是一些编码方法:
虚拟变量(get dummies):这个方法是用来得到一个区间在0和1之间的新的功能列,在pandas’library的帮助下对类别进行了编码。
标签编码器(Label Encoder):在sklearn库中,将二进制类别编码为数值。
独热编码(One Hot Encoder):sklearn库提供了另一种功能,可以将类别转换为数值区间为0和1的新功能列。
散列(Hashing):在高维情况下,它比独热编码更有用。当功能中的基数较高时,使用这个方法。
还有许多其他编码方法,例如平均数编码(mean encoding),Helmert编码(Helmert encoding),序数编码(ordinal encoding),概率比编码(probability ratio encoding)等等。
df1=pd.get_dummies(df['State'],drop_first=True)
python示例
虚拟变量编码
缺失值处理(Imputation)
当原始数据存在一些缺失值时,把缺失值转换为数字值的这个过程,被称为Imputation。
创建一个随机的数据结构:
# import the pandas library
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4, 3), index=['a', 'c', 'e',
'h'],columns=['First', 'Second', 'Three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df)
含有缺失值的数据结构
现在,用0来代替缺失值:
print ("NaN replaced with '0':")
print (df.fillna(0))
被0代替的缺失值
用平均值来代替缺失值:
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
sklearn提供了简单的缺失处理器来查找到NAN值,并用平均值替代。
我们可以在管道中使用缺失处理器,来使估算器达到更好的效果。
总结
数据的预处理是我们需要执行的重要步骤,这可以让我的算法对数据进行预估时更加可靠。
希望你喜欢这篇文章。
原文作者:Amit Chauhan
翻译作者:Jiawei Tong
美工编辑:过儿
校对审稿:Dongdong
原文链接:https://pub.towardsai.net/data-preprocessing-concepts-with-python-b93c63f14bb6
本周公开课预告
往期精彩回顾
点击“阅读原文”查看数据应用学院核心课程