Python机器学习算法与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 数据描述与异常值发现

数据描述是通过分析数据的统计特征,增强对数据的理解,从而利用合适的机器学习方法,对数据进行挖掘、分析。本节在介绍数据描述统计的同时,还会介绍一些简单的发现数据中异常值的方法。

2.2.1 数据描述统计

数据描述统计主要有数据的集中位置、离散程度、偏度和峰度等。该部分用鸢尾花数据集进行演示,并计算相关描述统计量。数据准备程序如下:

1.数据集中位置

针对导入的鸢尾花数据集Iris2,只保留了原始数据的4个数值变量。描述数据集中位置的统计量主要有均值、中位数、众数等。在计算数据中4个变量的相关统计量时,均值可使用mean()方法,中位数可使用median()方法,众数可使用mode()方法。相关计算程序和结果如下:

2.离散程度

描述数据离散程度的统计量主要有方差、标准差、变异系数、分位数和极差等。其中,方差和标准差取值越大,表明数据离散程度就越大,并且方差是标准差的平方,可以使用var()方法计算方差,使用std()方法计算标准差;变异系数是度量观测数据的标准差相对于均值的离中趋势,计算公式为均值除以标准差,变异系数没有量纲,所以针对不同度量方式的变量可以相互比较,变异系数取值越大说明数据越分散;分位数可以使用quantile()方法进行计算;极差是指数据最大值和最小值之间的差值,极差越小说明数据越集中,可以使用max()方法减去min()方法获得。计算鸢尾花数据中相关统计量可以使用下面的程序。

3.偏度和峰度

偏度和峰度是用来描述数据分布特征统计量的指标。偏度也称偏态系数,是用于衡量分布的不对称程度或偏斜程度的指标,可以通过数据表的skew()方法进行计算。峰度又称峰态系数,是用来衡量数据尾部分散度的指标,直观看来峰度反映了峰部的尖度,可以通过数据表的kurtosis()方法计算。计算鸢尾花4个变量的偏度和峰度的程序如下:

针对多个数据特征(变量),相关系数是度量数据变量之间线性相关性的指标。在二元变量的相关分析中,比较常用的有Pearson相关系数,常用于分析连续数值变量之间的关系;Spearman秩相关系数和判定系数,常用于分析离散数值变量之间的关系。对于数据表的相关系数,可以使用corr()方法进行计算,通过参数method可以指定计算的相关系数类型。对于多变量之间的相关系数,可在计算出其相关系数矩阵后,使用热力图进行可视化。获得鸢尾花4个变量的相关系数热力图的程序如下,程序运行后的结果如图2-9所示。

图2-9 相关系数热力图

相关系数的取值范围在[-1,1]之间,如果小于0说明变量间为负相关,越接近-1,负相关性越强;大于0说明变量间为正相关,越接近1,正相关性越强。

4.单个数据变量的分布情况

对于数据的描述统计,还可以使用可视化的方法进行分析,其中单个连续变量可以使用直方图进行可视化,辅助计算得到的相关统计量对数据进行更详细的理解。针对鸢尾花数据的PetalLengthCm变量,通过下面的直方图可视化程序,可获得如图2-10所示的直方图。可以发现该数据的分布呈现两个峰的情况,并且每个峰的分布情况也不一样。

2-10 连续变量的直方图

对于单个变量的离散变量,可以使用条形图进行可视化,对比每种离散值的出现情况。针对鸢尾花数据每类花的样本数据,使用条形图可视化的程序如下,程序运行后的结果如图2-11所示。

图2-11 条形图分析离散变量的样本量分布

2.2.2 发现异常值的基本方法

在数据分析过程中,经常会遇到数据中包含异常值的情况,并且异常值的存在经常会影响数据的建模结果。针对单个变量,通常可以使用3sigma法则识别异常值,即超出均值3倍标准差的数据可被认为是异常值,也可以使用箱线图来发现异常值。这里首先介绍如何使用Python发现数据的异常值。

使用前文由KNN填充缺失值后的oceandfknn数据中的5个变量,分析每个变量是否存在异常值,数据准备程序如下:

对于oceandfknn5中的每个变量使用3sigma法则,计算每个变量中是否存在异常值,以及异常值的数量,程序如下:

从输出结果中可以发现,UWind变量有6个异常值,VWind变量有10个异常值。针对该数据也可以使用箱线图进行可视化分析,箱线图在可视化时会使用点输出异常值的位置,因此可以判断数据中是否存在异常值。使用箱线图分析数据中是否存在异常值的程序如下:

运行程序后的结果如图2-12所示。从图中可以发现,Humidity变量有一个异常值,UWind和VWind变量有多个异常值。

图2-12 用箱线图分析异常值

前面两种方式是分析单个变量是否有异常值,对于两个变量,也可以使用散点图,直观地分析数据中是否有异常值,程序如下,运行结果如图2-13所示。

从图2-13所示的可视化结果中可以发现,数据中有一个点明显和其他数据点有不同的趋势,因此可以认为该数据点属于异常值。

图2-13 用散点图分析两个变量是否有异常值