用pyspark学习《应用预测建模》(二)进一步讨论BoxCox变换

本文继续探讨《应用预测建模》中的BoxCox变换,讲解如何通过极大似然估计确定最佳的λ值,以使数据转换后接近正态分布。在scipy中,采用optimize.brent方法寻找最大似然的λ,但在Spark中,由于求最大值需计算梯度,实现起来较为复杂。
摘要由CSDN通过智能技术生成

上一篇说到BoxCox变换,用来把分布显著有偏的数据转换成近似正态分布的数据。

如何确定最佳的λ呢?在scipy中,采用了极大似然估计,因为转换后的y是近似正态分布的,所以最佳的λ就是对数似然最大时对应的λ。 

查看scipy源码,在_morestats.py这个文件里,简化后的代码如下:

from scipy import stats,optimize

def boxcox_llf(lmb, data):
    data = np.asarray(data)
    N = data.shape[0]
    if N == 0:
        return np.nan

    logdata = np.log(data)

    # Compute the variance of the transformed data.
    if lmb == 0:
        variance = np.var(logdata, axis=0)
    else:
        # Transform without the constant offset 1/lmb.  The offset does
        # not effect the variance, and the subtraction of the offset can
        # lead to loss of precision.
        variance = np.var(data**lmb / lmb, axis=0)

    return (lmb - 1) * np.sum(lo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值