数据预处理:纠偏

纠偏

    • 1、偏态分布
    • 2、什么是纠偏
    • 3、数据纠偏



1、偏态分布


频数分布有正态分布和偏态分布之分。正态分布是指多数频数集中在中央位置,两端的频数分布大致对称

偏态分布是指频数分布不对称,集中位置偏向一侧。若集中位置偏向数值小的一侧,称为正偏态分布;集中位置偏向数值大的一侧,称为负偏态分布

如果频数分布的高峰向左偏移,长尾向右侧延伸称为正偏态分布,也称右偏态分布;同样的,如果频数分布的高峰向右偏移,长尾向左延伸则成为负偏态分布,也称左偏态分布

数据预处理:纠偏_第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())
])


参考文章:https://www.cnblogs.com/gczr/p/6802998.html


你可能感兴趣的:(#,人工智能与机器学习,#,Python,机器学习,sklearn)