机器学习爱好者机器学习100天Sklearn

机器学习之特征工程

2019-04-21  本文已影响5人  陨星落云

1.Scikit-learn与特征工程

1.1 数据来源与类型

大部分的数据都来数据库或者爬虫以及平时的记录等。

1.2 数据的特征抽取

现实世界中多数特征都不是连续变量,比如分类、文字、图像等,为了对非连续变量做特征表述,需要对这些特征做数学化表述,因此就用到了特征提取. sklearn.feature_extraction提供了特征提取的很多方法。

1.3 数据的特征预处理

其中μ是样本的均值,σ是样本的标准差,它们可以通过现有的样本进行估计,在已有的样本足够多的情况下比较稳定,适合嘈杂的数据场景。

sklearn中提供了StandardScalar类实现列标准化:

from sklearn.preprocessing import tandardScaler
def stand():
    std=StandardScaler()
    data=std.fit_transform([[1,-1,3],[2,4,2],[4,6,-1]])
    print(data)
    return None
[[-1.06904497 -1.35873244  0.98058068]
 [-0.26726124  0.33968311  0.39223227]
 [ 1.33630621  1.01904933 -1.37281295]]

3.缺失值

由于各种原因,许多现实世界的数据集包含缺少的值,通常编码为空白,NaN或其他占位符。然而,这样的数据集与scikit的分类器不兼容,它们假设数组中的所有值都是数字,并且都具有和保持含义。使用不完整数据集的基本策略是丢弃包含缺失值的整个行和/或列。然而,这是以丢失可能是有价值的数据(即使不完整)的代价。更好的策略是估算缺失值,即从已知部分的数据中推断它们。

  1. 填充缺失值 使用sklearn.preprocessing中的Imputer类进行数据的填充:
from sklearn.preprocessing import Imputer
import numpy as np
def im():
    im=Imputer(missing_values='NaN',strategy='mean',axis=0)
    data=im.fit_transform([[1,2],[np.nan,3],[7,6]])
    print(data)
    return None
[[1. 2.]
 [4. 3.]
 [7. 6.]]

2.pandas中缺失值处理

判断数据是否为NaN:pd.isnull(df),pd.notnull(df)

处理方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)

处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)

处理为0的数据:t[t==0]=np.nan

具体内容请参考pandas基础教程

1.4 数据的特征选择

上一篇 下一篇

猜你喜欢

热点阅读