1、偏态分布
频数分布有正态分布和偏态分布之分。正态分布是指多数频数集中在中央位置,两端的频数分布大致对称
偏态分布是指频数分布不对称,集中位置偏向一侧。若集中位置偏向数值小的一侧,称为正偏态分布;集中位置偏向数值大的一侧,称为负偏态分布
如果频数分布的高峰向左偏移,长尾向右侧延伸称为正偏态分布,也称右偏态分布;同样的,如果频数分布的高峰向右偏移,长尾向左延伸则成为负偏态分布,也称左偏态分布
当总体分布呈对称状态时,中位数=平均数;当总体分布呈右偏态状态时,说明存在极大值,会把平均值向极大值方向拉,中位数<平均数;当总体分布呈左偏态状态时,说明存在极小值,会把平均值向极小值方向拉,中位数>平均数
偏态分布只有满足一定的条件(样本数足够大时)才可以看做近似正态分布
与正态分布相对而言,偏态分布有两个特点:一是左右不对称(偏态);二是当样本数量增大时,其均数趋向正态分布
2、什么是纠偏
纠偏是指将偏态分布的数据转换为正态分布的数据。为什么要进行纠偏呢?
数据整体服从正态分布,则样本均值和方差相互独立。正态分布具有很多很好的性质,很多模型的前提都是假设数据服从正态分布的
例如,线性回归,它假设误差服从正态分布,从而每个样本点出现的概率就可以表示成正态分布的形式,将多个样本点连乘再取对数,就是所有训练集样本出现的条件概率,最大化这个条件概率就是线性回归最终要求解的问题。这里这个条件概率的最终表达式的形式就是我们熟悉的误差平方和
3、数据纠偏
对于数据右偏,可以对所有数据取对数函数处理;对于数据左偏,与右偏相反,则可以取指数函数处理
Scikit-Learn提供了数据纠偏的通用变换API:PowerTransformer
,方便我们对存在偏分布的数据集进行纠偏
API官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PowerTransformer.html
API中文官方文档:https://scikit-learn.org.cn/view/747.html
其中参数method
用于指定变换的方式,其中,yeo-johnson
变换(默认)可以处理包含正数和负数的变量;box-cox
变换只能处理数值都为正数的变量
以下是结合Pipeline管道进行数据纠偏的基本使用:
from sklearn.preprocessing import PowerTransformer
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
# 使用管道构建线性回归模型工作流
pipe = Pipeline([
('ss', StandardScaler()),
# standardize=True时转化成均值为0、方差为1的标准正态分布
('pt', PowerTransformer(method='yeo-johnson', standardize=False)),
('lr', LinearRegression())
])