首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中是否存在等效于powertransform的Python函数?

在R中是否存在等效于powertransform的Python函数?
EN

Stack Overflow用户
提问于 2019-08-27 08:21:45
回答 1查看 380关注 0票数 2

R中是否存在等效于幂变换的python函数?

这是R:powerTransform(X, family = "bcnPower")中的

我知道并使用了以下功能/包:

代码语言:javascript
复制
    from scipy.stats import skew,boxcox_normmax
    from scipy.special import boxcox, inv_boxcox
    from  scipy.stats import yeojohnson_normmax
    from scipy.stats import boxcox_llf
    from sklearn.preprocessing import power_transform
    from sklearn.preprocessing import PowerTransformer

我试图使用python转换列表(向量)。

代码语言:javascript
复制
from scipy.stats import boxcox_normmax
vec =""" 4  5  5  6  5  5  3  7  7  6  5  5  8  8  3  2  3  5 10  6  7  5  2  3  1  3  4  4  5  2  5  4  5  6  5  4  2  6  3 10  4  7  5  2
7  7  3 11  5  4  4  2  2  4  6  3  4  5  6  5  8  7  4  3  5  7  3  3  6  5  3  6  6  3  9  7  9  7  2  4  2  6  4  2  5  3  4  2
7  3  7  5  5  1  5  7  1  4  5  7"""
vec = list(map(int,vec.split()))
print("min  val :",min(vec))
print(boxcox_normmax(vec,method="all"))

:1

0.62926218 0.58382934

代码语言:javascript
复制
powerTransform(vec, family="bcnPower")

估计转换功率,lambda 1 0.5831778

位置伽马固定在其下限1 0.1

我希望python函数提供相同的输出参数和结果。

如果没有这样的函数,我能实现这样的函数吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-27 13:54:37

在Python中:

代码语言:javascript
复制
from sklearn.preprocessing import PowerTransformer
import pandas as pd
vec = """ 4  5  5  6  5  5  3  7  7  6  5  5  8  8  3  2  3  5 10  6  7  5  2  3  1  3  4  4  5  2  5  4  5  6  5  4  2  6  3 10  4  7  5  2
7  7  3 11  5  4  4  2  2  4  6  3  4  5  6  5  8  7  4  3  5  7  3  3  6  5  3  6  6  3  9  7  9  7  2  4  2  6  4  2  5  3  4  2
7  3  7  5  5  1  5  7  1  4  5  7"""
vec = list(map(int, vec.split()))
pt = PowerTransformer(method='box-cox', standardize=False)
data = pd.DataFrame(vec)
pt.fit(data)
print('Lambda =',pt.lambdas_)
print('First 10 elements:',pt.transform(data)[:10].reshape(1, -1))

#Lambda = [0.58382935]
#First 10 elements: [[2.13498738 2.67039083 2.67039083 3.16269828 2.67039083 2.67039083
#  1.54007639 3.62183527 3.62183527 3.16269828]]

如果您设置了power_transform,那么standardize=False也会给出相同的结果。

在R:

代码语言:javascript
复制
p = powerTransform(vec, family = "bcPower")
p$lambda
#      vec 
#0.5838294 
bcPower(vec, lambda=p$lambda)[1:10]
# [1] 2.134987 2.670391 2.670391 3.162698 2.670391 2.670391 1.540076
# [8] 3.621836 3.621836 3.162698
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57670487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档