gpt4 book ai didi

python - 具有导入函数的 sklearn FunctionTransformer

转载 作者:行者123 更新时间:2023-12-01 09:07:47 25 4
gpt4 key购买 nike

我正在尝试将数据处理管道放在一起。其中一个步骤需要在某个功能上应用具有特定 lmbda 值的 numpy.stats.boxcox。我想我应该为此使用 FunctionTransformer 。我可以让它适用于没有任何参数的基本函数,但我无法让它适用于具有特定 lambda 的 boxcox 函数。我认为我没有正确传递参数(见下文):

我可以让 FunctionTransformer 处理基本函数:

def plus_one(X):
return X + 1

b = np.array([[1, 2, 3], [4, 5, 6]], np.int32)

plus = FunctionTransformer(plus_one)

x = plus.transform(b)

print('b')
print(b)

print('')
print('b+1')
print(b + 1)

print('')
print('b + 1 by transformer')
print(x)

输出是:

b
[[1 2 3]
[4 5 6]]

b+1
[[2 3 4]
[5 6 7]]

b + 1 by transformer
[[2 3 4]
[5 6 7]]

我无法让它在像 boxcox 这样更复杂的函数上工作:

from scipy import stats

print('boxcox(b)')
print(stats.boxcox(b, lmbda = 0.21411476060664147))


bc_trans = FunctionTransformer(stats.boxcox(lmbda = 0.21411476060664147))
y = bc_trans.transform(b)

print('')
print('boxcox(b) by transformation')

输出为:

boxcox(b)
[[0. 0.7472251 1.23858159]
[1.61400018 1.92154649 2.18396975]]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-111-3615afca78ec> in <module>()
5
6
----> 7 bc_trans = FunctionTransformer(stats.boxcox(lmbda = 0.21411476060664147))
8 y = bc_trans.transform(b)
9

TypeError: boxcox() missing 1 required positional argument: 'x'

最佳答案

您需要创建一个包装 boxcox 调用的函数(如示例中的 plus_one)。其次,您需要传递函数定义而不是函数调用。此代码解决您的问题:

import numpy as np
from sklearn.preprocessing import FunctionTransformer
from scipy import stats


def bx(X):
return stats.boxcox(X, lmbda=0.21411476060664147)

b = np.array([[1, 2, 3], [4, 5, 6]], np.int32)

bc_trans = FunctionTransformer(bx)
y = bc_trans.transform(b)

print('')
print('boxcox(b) by transformation')

请注意,上面的代码定义了一个函数 bx 并将该函数(不是函数调用)传递给 FunctionTransformer。一个更Pythonic的解决方案是使用partial。只需添加

from functools import partial

到您的导入并通过以下方式更改函数定义:

bx = partial(stats.boxcox, lmbda=0.21411476060664147)

关于python - 具有导入函数的 sklearn FunctionTransformer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com