【问题标题】:how to perform box-cox transformation to single column in python如何在python中对单列执行box-cox转换
【发布时间】:2022-08-23 07:09:23
【问题描述】:

我正在尝试将 box-cox 转换应用于单个列,但我无法做到这一点。有人可以帮我解决这个问题吗?

from sklearn.datasets import fetch_california_housing
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels.api as sm
from sklearn.preprocessing import PowerTransformer

california_housing = fetch_california_housing(as_frame=True).frame
california_housing

power = PowerTransformer(method='box-cox', standardize=True)
california_housing['MedHouseVal']=power.fit_transform(california_housing['MedHouseVal'])

【问题讨论】:

    标签: python pandas dataframe linear-regression data-science-experience


    【解决方案1】:

    函数power.fit_transform 要求输入数据在单个特征的情况下具有形状(n, 1) 而不是(n,)(其中california_housing['MedHouseVal'] 的形状为(n,),因为它是pd.Series)。这可以通过重塑来实现,即通过替换

    power.fit_transform(california_housing['MedHouseVal'])
    

    power.fit_transform(california_housing['MedHouseVal'].to_numpy().reshape(-1, 1))
    

    或者,或者,更具可读性,只需使用california_housing[['MedHouseVal']] 访问列列表(给出pd.DataFrame)而不是使用california_housing['MedHouseVal'] 访问单个列(给出pd.Series),即使用

    power.fit_transform(california_housing[['MedHouseVal']])
    

    注意

    print(california_housing['MedHouseVal'].shape)
    print(california_housing[['MedHouseVal']].shape)
    

    印刷

    (20640,)
    (20640, 1)
    

    另一种选择是使用scipy.stats.boxcox

    from sklearn.datasets import fetch_california_housing
    from scipy.stats import boxcox
    
    california_housing = fetch_california_housing(as_frame=True).frame
    california_housing['MedHouseVal'] = boxcox(california_housing['MedHouseVal'])[0]
    

    【讨论】:

    • 谢谢你的代码。但是上面的代码有什么问题呢?
    • 需要使用.reshape(-1, 1) 重新调整数据,因为只有一个功能(如错误消息告诉您的那样)。请参阅编辑后的答案。
    • 太感谢了。在这种方法中,为什么我们应该有一个零 [0]? california_housing['MedHouseVal'] = boxcox(california_housing['MedHouseVal'])[0]
    • scipy.stats.boxcox() 返回一个元组,其中第一个元素,即boxcox(...)[0],是转换后的数组,第二个是最大化对数似然的 lambda,等等。详情请参阅文档:docs.scipy.org/doc/scipy/reference/generated/…
    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2014-12-11
    • 2021-02-16
    • 2019-12-25
    相关资源
    最近更新 更多