zoukankan      html  css  js  c++  java
  • 机器学习实战——特征工程之数据预处理

    机器学习实战的特征工程主要包含数据预处理、特征构建、特征选择三步,首先来介绍数据预处理。

    我选择python作为工具,并将主要用到pandas、numpy等数据工具库。加载库:

    import pandas as pd
    import numpy as np

    1. 观察数据

    (1)查看数据的行数和列数

    print("TRAIN shape:",train.shape)

    (2)查看数据的标签

    print("TRAIN columns:",train.columns)

    (3)查看各字段的信息(大小、数据类型)

    print("查看各字段的信息:
    "),train.info()     #不需要print

    (4)查看数据描述(数据长度、均值、标准差、极大值、极小值、四分位点)

    print("TRAIN describe:
    "), train.describe()

    (5)查看本题的label

    print('本题的label是:',set(train.columns)-set(test.columns))

    2. 处理错误数据

    如果观察数据时发现在某些应该是int或float等数值型的列的类型是object,表明存在错误数据,需要观察后进行处理。

    (1)将内容为"\N"的脏数据替换为-1

    train['column_i'] = train['column_i'].replace("\N",-1)

    (2)将格式为'str'的数据转化为'float'型

    train['column_i'] = train['column_i'].astype('float')

    3. 缺失值处理

    (1)查看缺失值所占比例

    print("缺失值比例:", len(train['column_i'][pd.isnull(train['column_i'])]) / len(train['column_i']))
    

    (2)删除包含缺失值的任意行

    train = train.dropna()

    (3)用0/-1/均值/众数/中位数填补

    train = train.fillna(0)
    train = train.fillna(-1)
    train['column_i'] = train['column_i'].fillna(train['column_i'].mean()) #均值
    train['column_i'] = train['column_i'].fillna(train['column_i'].mode()) #众数
    train['column_i'] = train['column_i'].fillna(train['column_i'].median()) #中位数

    4. 异常值处理

    由于测量误差或实验误差,原始数据中可能会存在异常值。检测异常值最常见的方法是数据可视化,另外也可以根据一些规则来判定异常值,如将超出数据5%或95%的值视为异常值、距均值超过四分卫距两倍的值看作异常值等等。

    5. 数据标准化与编码

    (1)Min-Max标准化

    也称离差标准化,将数据映射到0~1范围之内处理,对于方差非常小的属性可以增强其稳定性,公式为:

    x{}'=frac{x-min}{max-min}

    train['column_i'] = (train['column_i']-train['column_i'].min())/(train['column_i'].max()-train['column_i'].min())
    

    (2)one-hot编码

    将指定列进行one-hot编码,并合并到原dataframe中。

    train = train.join(pd.get_dummies(train['gender']))

    (3)映射编码

    将无实际意义的离散值映射到0~n的范围内。

    # 定义两个字典,用于映射
    label2data = dict(zip(range(0,len(set(train['column_i']))),sorted(list(set(train['column_i'])))))
    data2label = dict(zip(sorted(list(set(train['column_i']))),range(0,len(set(train['column_i'])))))
    train['column_i'] = train['column_i'].map(data2label) #编码
    train['column_i'] = train['column_i'].map(label2data) #解码
    
  • 相关阅读:
    初识增长黑客Growth Hacker
    OpenCV学习目录(持续更新)
    leetcode算法-回文判断
    leetcode算法-整数反转
    日常撸题技巧【总结】
    hihocoder 题目类型整理
    【hiho】92-93--素数【数论】
    notepad打造成C/C++IDE【Notepad】
    ACM知识点总结【杂】
    Nastya Studies Informatics
  • 原文地址:https://www.cnblogs.com/yucen/p/9912062.html
Copyright © 2011-2022 走看看