第三周:数据预处理

数据预处理

1.无量纲化

1.1 最值归一化(MinMaxScaler)

from sklearn.preprocessing import MinMaxScaler
#区间缩放,返回值为缩放到[0, 1]区间的数据
minMaxScaler  = MinMaxScaler().fit_transform(X_train)

当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling)。
第三周:数据预处理
缺点:

  • 这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义;
  • MinMaxScaler对异常值的存在非常敏感。

1.2 均值方差归一化(StandardScaler)

from sklearn.preprocessing import StandardScaler
#标准化,返回值为标准化后的数据
standardScaler  = StandardScaler().fit_transform(X_train)

当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),就叫做数据标准化(Standardization,又称Z-score normalization)
第三周:数据预处理
优点:

  • Z-Score最大的优点就是简单,容易计算,Z-Score能够应用于数值型的数据,并且不受数据量级的影响,因为它本身的作用就是消除量级给分析带来的不便。

缺点:

  • 估算Z-Score需要总体的平均值与方差,但是这一值在真实的分析与挖掘中很难得到,大多数情况下是用样本的均值与标准差替代;
  • Z-Score对于数据的分布有一定的要求,正态分布是最有利于Z-Score计算的;
  • Z-Score消除了数据具有的实际意义,A的Z-Score与B的Z-Score与他们各自的分数不再有关系,因此Z-Score的结果只能用于比较数据间的结果,数据的真实意义还需要还原原值;
  • 在存在异常值时无法保证平衡的特征尺度。

一般来说,建议优先使用标准化。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。

2.缺失值处理

2.1 impute.SimpleImputer

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer()
imp_mean = imp_mean.fit_transform(Age)

class sklearn.impute.SimpleImputer (missing_values=nan, strategy=’mean’, fill_value=None, verbose=0,copy=True)
第三周:数据预处理

3.处理分类型特征

3.1 标签编码(preprocessing.LabelEncoder)

from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])

LabelEncoder:标签专用,能够将分类转换为分类数值

3.2 特征编(preprocessing.OrdinalEncoder)

from sklearn.preprocessing import OrdinalEncoder
data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])

OrdinalEncoder:特征专用,能够将分类特征转换为分类数值

3.3 哑变量(preprocessing.OneHotEncoder)

from sklearn.preprocessing import OneHotEncoder
X = data.iloc[:,1:-1]
enc = OneHotEncoder(categories='auto').fit(X)
result = enc.transform(X).toarray()
result

OneHotEncoder:独热编码,创建哑变量
第三周:数据预处理

4.处理连续型特征

4.1 二值化(preprocessing.Binarizer)

from sklearn.preprocessing import Binarizer
X = data_2.iloc[:,0].values.reshape(-1,1) #类为特征专用,所以不能使用一维数组
transformer = Binarizer(threshold=30).fit_transform(X)

preprocessing.Binarizer:根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量

4.2 分段(preprocessing.KBinsDiscretizer)

from sklearn.preprocessing import KBinsDiscretizer
X = data.iloc[:,0].values.reshape(-1,1)
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit_transform(X)

preprocessing.KBinsDiscretizer:将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码
第三周:数据预处理

上一篇:理解 sklearn.preprocessing.MinMaxScaler


下一篇:机器学习实战基础(一):数据预处理技术