「Python」sklearn第三弹-多项式特征和缺失值处理

208 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天, 点击查看活动详情

本文是讲解机器学习模块sklearn第三讲,主要讲解数据挖掘中的多项式特征以及缺失值的相关处理。

多项式特征

why? 在数据挖掘中,获取数据的代价经常是非常高昂的。所以有时就需要人为的制造一些特征,并且有的特征之间是有关联的。生成多项式特征可以轻松的为我们获取更多的数据,并获得特征的更高维度和互相间关系的项且引入了特征之间的非线性关系,可以有效的增加模型的复杂度。

PolynomialFeatures

在sklearn中通过PolynomialFeatures方法来生成多项式特征,使用方法如下:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
data = np.arange(6).reshape(3, 2)
poly = PolynomialFeatures(2)
# (degree=2, inte\fraction_only=True)#degree=n表示生成n项式特征,只需要特征之间交互
data = poly.fit_transform(data)
>>>data
array([[ 1.,  0.,  1.,  0.,  0.,  1.],
       [ 1.,  2.,  3.,  4.,  6.,  9.],
       [ 1.,  4.,  5., 16., 20., 25.]])

缺失值处理

why?

由于各种原因,真实世界中的许多数据集都包含缺失数据,这类数据经常被编码成空格、NaN,或者是其他的占位符。

但是这样的数据集并不能被sklearn学习算法兼容,因为大多的学习算法都默认假设数组中的元素都是数值,因而所有的元素都有自己的意义。

使用不完整的数据集的一个基本策略就是舍弃掉整行或整列包含缺失值的数据。但是这样就付出了舍弃可能有价值数据(即使是不完整的 )的代价。 处理缺失数值的一个更好的策略就是从已有的数据推断出缺失的数值。


在sklearn中使用imputer方法,通过指定参数,来实现填充缺失值的方法。主要提供了使用平均值代替缺失值,使用中位数代替缺失值,使用频率最高的值代替缺失值三种方法。

Imputer

class sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)

参数:

  • missing_values: integer or “NaN”, optional (default=”NaN”)

  • strategy : string, optional (default=”mean”)

  • The imputation strategy.

    • If “mean”, then replace missing values using the mean along the axis. 使用平均值代替
    • If “median”, then replace missing values using the median along the axis.使用中值代替
    • If “most_frequent”, then replace missing using the most frequent value along the axis.使用众数代替,也就是出现次数最多的数
  • axis: 默认为 axis=0

    • axis = 0, 按列处理
    • aixs =1 , 按行处理

代码实例:

from sklearn.preprocessing import Imputer
data = [[np.nan, 2], [6, np.nan], [7, 4],[np.nan,4]]
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)#缺失值为nan,沿着每一列,使用平均值来代替缺失值
data = imp.fit_transform(data)
>>>data
array([[6.5       , 2.        ],
       [6.        , 3.33333333],
       [7.        , 4.        ],
       [6.5       , 4.        ]])

'''
strategy:
`mean`表示使用平均值代替缺失值
`median`表示使用中位数代替缺失值
`most_frequent`表示使用出现频率最多的值代替缺失值

missing_values: 表示何为缺失值
`NaN`表示`np.nan`为缺失值
`0`表示`0`为缺失值

往期链接直达⛷️🤺⛷️👇:

1.sklearn第一弹-标准化和非线性转化

2.sklearn第二弹-归一化和离散值编码