您的位置:首页 > 其它

机器学习3---数据的特征工程之特征处理

2020-07-23 00:54 190 查看

特征处理

概念

特征处理是指通过特定的统计方法(数学方法)将数据转换成算法要求的数据。

  1. 数值型数据:归一化、标准化、缺失值处理;
  2. 类别型数据:one-hot编码;
  3. 时间类型:时间的切分。

sklearn特征处理API

sklearn.preprocessing

归一化

  1. 概念:通过对原始数据进行变换把数据映射到(默认为[0, 1])指定范围。
  2. sklearn归一化API:sklearn.preprocessing.MinMaxScaler
    语法:
    (1)实例化:MinMaxScalar(feature_range = (0, 1),……)
    即每个特征值缩放到指定范围(默认[0, 1])
    (2)MinMaxScalar.fit_transform(X)
    X:numpy array格式的数据[n_samples, n_features]
    返回值:与转换前相同的array
  3. 归一化步骤
    (1)实例化MinMaxScalar
    (2)通过fit_transform转换
from sklearn.preprocessing import MinMaxScaler

def mm():
"""
归一化处理
:return: None
"""
# 实例化
mm = MinMaxScaler(feature_range=(2, 3))

# fit_transform
data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
print(data)

return None

if __name__ == '__main__':
mm()

运行结果:

  1. 归一化适用场景:
    例:

    若不进行归一化,在进行后续的数据处理时,如k近邻算法,会发现里程数相比其他两个特征对最终结果的影响更大。因此,在认为几个特征同等重要时,有必要对数据进行归一化处理(归一化的目的即是使某一个特征对结果不会造成更大影响)。
  2. 归一化存在的问题
    当数据中存在异常点(如下图所示)时,会影响数据的最大值和最小值,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

标准化

标准化能解决上面提出的异常点问题。

  1. 概念
    标准化通过对原始数据进行变换,将数据变换到均值为0,方差为1的范围内:


  2. sklearn标准化API:
    sklearn.preprocessing.StandardScaler
    (1)StandardScaler.fit_transform(X)
    X: numpy格式的数据[n_samples, n_features]
    返回值:与转换前形状相同的array
    (2)StandardScaler.mean
    原始数据中每列特征的平均值
    (3)StandardScaler.std
    原始数据中每列特征的方差

  3. 标准化步骤
    (1)实例化StandardScaler
    (2)通过fit_transform转换

  4. 标准化适用场景
    标准化在已有样本足够过的情况比较稳定,适合现代嘈杂大数据场景。

缺失值处理

  1. 缺失值处理方法
删除 若每列或者行数据缺失值达到一定比例,建议放弃整行或者整列
插补 可以通过缺失值每行或者每列的平均值、中位数来填充
  1. 缺失值处理API:
    sklearn.preprocessing.Imputer
    (1)实例化:
    Imputer(missing_values = “NaN”, strategy = “mean”, axis = 0)
    注:axis=0为列方向
    (2)Imputer.fit_transform(X)
    X: numpy array格式的数据[n_samples, n_features]
    返回值:与转换前形状相同的array

  2. Imputer流程:
    (1)初始化Imputer,指定“缺失值”,指定填补策略,指定行或列(缺失值也可以是别的指定要替换的值)
    (2)调用fit_transform()

  3. 关于np.nan(np.NaN)
    (1)numpy的数组中可以使用np.nan或者np.NaN来代替缺失值,属于float类型;
    (2)如果是文件中的一些缺失值,可以替换成nan,通过np.array转换成float类型的数据即可。如:replace(“?”,np.nan)

from sklearn.preprocessing import Imputer
import numpy as np

def im():
"""
缺失值处理
:return:
"""
im = Imputer(missing_values="NaN", strategy="mean", axis=0)
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)

return None

if __name__ == '__main__':
im()

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: