机器学习:特征工程之数据处理

目录

  • 第一部分:数据特征预处理
    • 一.归一化
    • 二.标准化
    • 三.缺失值处理
  • 备注:
    • 一.词
    • 二.sklearn库

第一部分:数据特征预处理

特征处理:通过特定的统计方法(数学方法)将数据转换成算法要求的数据。
数值型数据:标准缩放(归一化、标准化)、缺失值处理
类别型数据:one-hot编码
时间类型:时间的切分
sklearn.preprocessing模块提供了一些数据预处理API

一.归一化

1.目的
在特征(维度)非常多的时候,可以防止某一维或某几维对数据影响过大,把不同来源的数据统一到一个参考区间下,使得不同数值范围的数据变得同等重要,预测结果更有意义。
例如:一个人的身高和体重两个特征,假如体重50kg,身高175cm,由于两个单位不一样,数值大小不一样。如果比较两个人的体型差距时,那么身高的影响结果会比较大。
2.原理
通过对原始数据进行线性变换把数据映射到[min,max]之间,通常取[0,1]:
机器学习:特征工程之数据处理_第1张图片
3.代码
1)普通归一化

def feature_normal(data_set)
    #特征归一化
    min_vals = data_set.min(0)
    max_vals = data_set.max(0)
    ranges = max_vals - min_vals
    norm_data = np.zeros(np.shape(data_set))
    # 得出行数
    m = data_set.shape[0]
    # 复制min_vals,行数乘m,再进行矩阵相减
    norm_data = data_set - np.tile(min_vals, (m,1))
    # 复制ranges,行数乘m,再进行矩阵相除
    norm_data = norm_data/np.tile(ranges, (m, 1)))
    return norm_data

2)调用sklearn.preprocessing.MinMaxScaler
MinMaxScaler(feature_range=(min,max))----每个特征缩放到给定范围(默认[0,1]);
MinMaxScaler.fit_transform(X)----返回转换后的array,X:numpy array格式的数据[n_samples,n_features]。

>>> from sklearn.preprocessing import MinMaxScaler
>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])

4.特点:最大值与最小值非常容易受异常点影响,归一化鲁棒性较差,只适合传统精确小数据场景。

二.标准化

1.目的:在归一化方法中异常点的影响很大,要考虑另一种能反应数据的关系,且受异常值影响较小的数据转换方法。
2.原理:通过对原始数据进行变换把数据变换到均值为0,方差为1范围内:
在这里插入图片描述
3.代码
调用sklearn.preprocessing.StandardScaler

In [2]: import numpy as np
In [3]: X_train = np.array([[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]])
In [4]: from sklearn.preprocessing import StandardScaler
In [5]: std = StandardScaler()
In [6]: X_train_std = std.fit_transform(X_train)
In [7]: X_train_std
Out[7]:
array([[ 0.        , -1.22474487,  1.33630621],
       [ 1.22474487,  0.        , -0.26726124],
       [-1.22474487,  1.22474487, -1.06904497]])

4.特点:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小,适合现代嘈杂大数据场景。

三.缺失值处理

1.概述
由于各种原因,实际中得到的数据常常是不完整的,缺少的值通常编码为空白、NaN或其他占位符,不能用于机器学习。对于缺失值的处理有删除和插补两种,删除指丢弃包含缺失值的整个行或列,但可能会丢失有价值的数据;常用的方法是插补,即用均值、中位数估算缺失值。
2.方法
1)可以用pandas中的dropna()丢弃缺失值,或fillna()填补缺失值
2)sklearn.preprocessing中的Imputer类进行填充

>>> import numpy as np
>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
>>> imp.fit([[1, 2], [np.nan, 3], [7, 6]])
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)
>>> print(imp.transform([[1, 2], [np.nan, 3], [7, 6]]))                          
[[ 1.          2.        ]
 [ 4.          3.        ]
 [ 7.          6.        ]]

注:Imputer实例化后,在填补缺失值前必须进行适配(fit),即先调用Imputer.fit()再调用Imputer.transform()进行转换,或者直接调用Imputer.fit_transform()进行适配和转换。
3.注意
无论是pandas还是sklearn.preprocessing中对缺失值的处理,都是针对np.nan类型的缺失值,在得到数据后,还需要将其他形式的缺失值转换成np.nan,才能进行处理。

备注:

一.词

API----Application Programming Interface,应用程序接口
strategy----策略

二.sklearn库

sklearn库中包含很多机器学习的模型及数据处理的API,可以用于实践练习,但实际工程中如果考虑到性能和效率,也需要自己进行代码书写。

你可能感兴趣的:(机器学习:特征工程之数据处理)