zoukankan      html  css  js  c++  java
  • 《特征工程三部曲》之一:数据处理

    要理解特征工程,首先要理解数据(Data)和特征(Feature)的概念

    概念

    • 特征工程(Feature Engineering)

      • 其本质上是一项工程活动,它目的是最大限度地从原始数据中提取特征以供算法和模型使用。

    特征工程在数据挖掘中有举足轻重的位置
    数据领域一致认为:数据和特征决定了机器学习的上限,而模型和算法只能逼近这个上限而已。

    • 特征工程重要性:

      • 特征越好,灵活性越强;

      • 特征越好,模型越简单;

      • 特征越好,性能越出色;

    好特征即使使用一般的模型,也能得到很好的效果!好特征的灵活性在于它允许你可以选择不复杂的模型,同时,运行速度也更快,也更容易理解和维护。

    好的特征,即使参数不是最优解,模型性能也能表现很好,因此,不需要太多时间去寻找最优参数,大大的降低了模型的复杂度,使模型趋向简单。

    模型的性能包括模型的效果,执行的效率及模型的可解释性。特征工程的最终目的就是提升模型的性能。

    数据科学家通过总结和归纳,把特征工程划分为以下三个部分:

    • 特征工程包括:

      • 数据处理

      • 特征选择

      • 维度压缩

    数据处理

    数据处理的常用技巧

    • 量纲不一

    • 虚拟变量

    • 缺失值填充

    数据处理——量纲不一

    • 量纲:就是单位,特征的单位不一致,特征就不能放在一起比较。

    • 解决量纲不一致的方法:标准化

      • 0-1标准化

      • Z标准化

      • Normalizer归一化

    0-1标准化

    是对原始数据进行线性变换,将特征值映射成区间为[0,1]的标准值中:

    =

    Z标准化

    基于特征值的均值(mean)和标准差(standard deviation)进行数据的标准化。它的计算公式为:

    =

    标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

    Normalizer归一化

    将每个样本缩放到单位范数(每个样本的范数为1),计算公式如下:

    x¯=xni=1x2i

    如何使用sklearn实现标准化

    sklearn简介

    • sklearn

      • 全名Scikit-Learn,是基于Python的机器学习模块,基于BSD开源许可证,官网上可以找到相关sklearn的资源,模块下载,文档,历程等等;

      • sklearn的数据结构基于numpy和pandas;

      • sklearn的数据计算基于scipy;

      • sklearn的数据可视化基于matplotlib;

    • sklearn是在现有的数据分析,数据计算,数据可视化最好的包的基础上,搭建起来的最好python 机器学习的框架;

    • sklearn的六大基本功能

      • 分类

      • 回归

      • 聚类

      • 数据降维

      • 模型选择

      • 模型预处理

    • sklearn处理机器学习问题的三个步骤:

      • 数据准备与预处理

      • 模型选择与训练

      • 模型验证与参数调优

    用sklearn实现标准化

    #导入数据到data变量中
    import pandas
    data = pandas.read_csv('路径.csv')
    
    #(一)Min-Max 标准化
    
    from sklearn.preprocessing import MinMaxScaler
    #初始化一个scaler对象
    scaler = MinMaxScaler()
    #调用scaler的fit_transform方法,把我们要处理的列作为参数传进去
    
    data['标准化后的A列数据'] = scaler.fit_transform(data['A列数据'])
    data['标准化后的B列数据'] = scaler.fit_transform(data['B列数据'])
    
    #(二)Z-Score标准化 (可在scale中直接实现)
    
    from sklearn.preprocessing import scale
    data['标准化后的A列数据'] = scale(data['A列数据'])
    data['标准化后的B列数据'] = scale(data['B列数据'])
    
    # (三) Normalizer归一化
    
    from sklearn.preprocessing import Normalizer
    scaler = Normalizer()
    #归一化可以同时处理多个列,所以[0]第一个进行赋值
    data['归一化后的A列数据'] = scaler.fit_transform(data['A列数据'])[0]
    data['归一化后的B列数据'] = scaler.fit_transform(data['B列数据'])[0]
    

    数据处理——虚拟变量

    • 虚拟变量:也叫哑变量和离散特征编码,可用来表示分类变量、非数据因素可能产生的影响。

    • 虚拟变量的两种数据类型:

      • 离散特征的取值之间有大小的意义:例如:尺寸(L、XL、XXL)

      • 离散特征的取值之间没有大小的意义:例如:颜色(Red、Blue、Green)

    • 离散特征值有大小意义的虚拟变量处理

      • pandas.Series.map(dict)

        • 离散特征的取值之间有大小意义的处理函数,我们只需要把大小值以字典的方式,作为第一个参数传入即可;

          • (1) dict 映射的字典
    • 离散特征值没有大小意义的虚拟变量处理

      • pandas.get_dummies(data,prefix=None,prefix_sep=’_’,dummy_na=False,columns=None,drop_first=False)

        • 离散特征的取值之间没有大小意义的处理方法,我们可以使用get_dummies方法处理,它有6个常用的参数

          • (1) data 要处理的DataFrame

          • (2) prefix 列名的前缀,在多个列有相同的离散项时候使用

          • (3) prefix_sep 前缀和离散值的分隔符,默认为下划线,默认即可

          • (4) dummy_na 是否把NA值,作为一个离散值进行处理,默认不处理

          • (5) columns 要处理的列名,如果不指定该列,那么默认处理所有列

          • (6) drop_first 是否从备选项中删第一个,建模的时候为避免共线性使用

    虚拟变量—实战案例

    以互联网金融行业为例:

    import pandas
    #有些朋友也可能是encoding='utf8'或其他
    data=pandas.read_csv('file:///Users/apple/Desktop/jacky_1.csv',encoding='GBK')
    print(data)

    @数据分析-jacky

    其实,虚拟变量的实质就是要把离散型的数据转化为连续型的数据,因为第1列年龄已经是连续值,所以我们就不需要处理了。
    我们看看如何处理学历和性别?
    因为不同学历之间是有高低之分的,因此我们要使用Map方法来处理这种类型的离散型数据;

    • 第1步: 首先我们要处理不同学历之间的大小值

      • 我们使用drop_duplicates方法,来看看数据列都有哪些学历
    #查看学历去重之后的情况
    data['学历'].drop_duplicates()
    • 第2步:理解数据值背后的意义,作出我们自己的解析,对每个学历进行评分
    #构建学历字典
    educationLevelDict={'博士':4,'硕士':3,'大学':2,'大专':1}
    #调用Map方法进行虚拟变量的转换
    data['Education Level Map']=data['Education Level'].map(educationLevelDict)

    @数据分析-jacky

    • 第3步 对于性别这种没有大小比较的离散变量,我们使用get_dummies方法,来进行调用处理即可;
    dummies=pandas.get_dummies(
    data,
    columns=['性别'],
    prefix=['性别'],
    prefix_sep='_',
    dummy_na=False,
    drop_first=False)
    • 完整代码展示
    import pandas
    data=pandas.read_csv('file:///Users/apple/Desktop/jacky_1.csv',encoding='GBK')
    
    data['学历'].drop_duplicates()
    educationLevelDict={'博士':4,'硕士':3,'大学':2,'大专':1}
    data['学历 Map']=data['学历'].map(educationLevelDict)
    
    dummies=pandas.get_dummies(data,columns=['性别'],prefix=['性别'],prefix_sep='_',dummy_na=False,drop_first=False)
    
    print(dummies)

    @数据分析部落

    数据处理——缺失值填充

    • 缺失值产生原因

      • 有些信息暂时无法获取;

      • 有些信息被遗漏或者错误的处理了

    • 缺失值处理方法

      • 数据补齐

      • 删除缺失行

      • 不处理

    实操-使用统计指标填充缺失值

    import pandas
    data=pandas.read_csv('路径.csv')
    from sclera.preprocessing import Imputer
    #'mean','median','most_frequent'
    imputer=Imputer(strategy='mean')
    imputer.fit_transform(data[['需填充列的列名']])
  • 相关阅读:
    ssl双向认证
    keycloak管理用户权限
    Apollo单向SSL认证(2)
    Apollo单向SSL认证(1)
    apollo1.7.1初探(二)使用apollo订阅主题,发布主题消息
    apollo1.7.1初探(一)安装apollo、创建并启动broker
    Mosquito集群模式
    什么是MQTT协议?
    物影子操作
    kafka和mqtt的区别是什么?
  • 原文地址:https://www.cnblogs.com/shujufenxi/p/7786581.html
Copyright © 2011-2022 走看看