摘要
第3章数据清洗与特征预处理
数据处理是建立机器学习模型的第一步,对最终结果有决定性的作用。本章重点介
绍数据清洗与特征预处理。其中,数据清洗是指对缺失值、异常值和重复值等进行处理;
特征预处理是指通过规范化、标准化、鲁棒化和正则化等方法将数据转化成符合算法要求
的数据。最后介绍misingno库和词云,它们用于可视化显示数据相关信息。
3.数据清洗
1
3.1
数据清洗简介
1.
在处理数据之前,需要进行数据质量分析,了解数据的功能和作用,检查原始数据中
是否存在脏数据。脏数据一般是指不符合要求以及不能直接进行相应分析的数据。
脏数据往往存在如下问题:没有列头,一个列有多个参数,列数据的单位不统一,存
在缺失值、空行、重复数据和非ASCI
字符,有些列头应该是数据而不应该是列名参数,
等等。可将这些问题大致归类为缺失值、异常值和重复值等噪声数据问题。而数据清洗
就是发现并处理这些数据问题。
3.2
评价标准
1.
对于数据的评价一般具有如下标准:
(1)准确性。描述数据是否与其对应的客观实体的特征一致。
(2)完整性。描述数据是否存在缺失记录或缺失字段。
(3)一致性。描述同一实体的同一属性的值在不同系统中是否一致。
(4)有效性。描述数据是否满足用户定义的条件或在一定的域值范围内。
(5)专享性。描述数据是否存在重复记录。
3.清洗方法
2
2.缺失值
3.1
缺失值通常是指记录的缺失和记录中某个字段信息的缺失,一般以空白、NaN或其
他占位符编码,采用删除法和数据填充进行处理。
.删除法。如果某个属性的缺失值过多,可以直接删除整个属性。
.数据填充。使用一个全局变量填充缺失值,使用属性的平均值、中间值、优选值、
57 最小值或更为复杂的概率统计函数值填充缺失值。
常用填充方法如表3.1所示。
表3.1 常用填充方法
填充方法方法描述
平均值/中位数根据属性值的类型,用该属性取值的平均值/中位数填充
固定值将缺失的属性值用一个常量替换
最近值用最接近缺失值的属性值填补
Sklearn中的Imputer类或SimpleImputer类用于处理缺失值。其中,Imputer在
preprocessing模块中,而SimpleImputer在sklearn.impute模块中。
Imputer具体语法如下:
from sklearn.preprocessing import Imputer
imp=Imputer(missing_values="NaN", strategy="mean")
SimpleImputer具体语法如下:
from sklearn.impute import SimpleImputer
imp=SimpleImputer(missing_values=np.nan, strategy="mean")
参数含义如下:
. missing_values=np.nan:缺失值是NaN。
.strategy="mean":用平均值、中位数等填充缺失值。
【例3.1】 缺失值处理示例。
import pandas as pd
import numpy as np
#from sklearn.preprocessing import Imputer
from sklearn.impute import SimpleImputer
df=pd.DataFrame([["XXL", 8, "black", "class 1", 22],
["L", np.nan, "gray", "class 2", 20],
["XL", 10, "blue", "class 2", 19],
["M", np.nan, "orange", "class 1", 17],
["M", 11, "green", "class 3", np.nan],
["M", 7, "red", "class 1", 22]])
df.columns=["size", "price", "color", "class", "boh"]
print(df)
#1. 创建Imputer
#imp=Imputer(missing_values="NaN", strategy="mean" )
imp=SimpleImputer(missing_values=np.nan, strategy="mean")
#2. 使用fit_transform 函数完成缺失值填充
df["price"]=imp.fit_transform(df[["price"]])
print(df)
58
【程序运行结果】 b 4.5
a NaN
dtype: float64
f 1.0
e NaN
d 3.0
c 4.0
b 5.0
a NaN
dtype: float64
f 1.0
e 2.5
d 3.0
c 4.0
b 5.0
a NaN
dtype: float64
3.3 特征预处理
有一句话在业界广泛流传:“数据和特征决定了机器学习的上限,而模型和算法只是
逼近这个上限而已。”这里的数据是指经过特征预处理后的数据。特征预处理就是对数据
进行集成、转换、规约等一系列处理,使之适合算法模型的过程。
Sklearn提供了preprocessing模块,用于进行归一化、标准化、鲁棒化、正则化等数据
预处理。preprocessing模块常用方法如表3.4所示。
表3.4 preprocessing模块常用方法
方 法 名方法含义
preprocessing.MinMaxScaler 归一化
preprocessing.StandardScaler 标准化
preprocessing.RobustScaler 鲁棒化
preprocessing.normalize 正则化
68
3.3.1 归一化
归一化又称为区间缩放