numpy PowerTransformer为不同的输入返回相同的值,我该怎么办?

xmd2e60i  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(101)

有一个合适的pt = PowerTransformer(method='yeo-johnson', standardize=False) (lambda = -3.2028635015981934)。我将其应用于新数据,并看到对应于不同输入的连续相同值。

Input:
for input_value, transformed_value in zip(bad_array, bad_array_transformed):
    print('input_value =', input_value[0])
    print('transformed_value =', transformed_value[0])
    print('---------------------')

Output:
input_value = 1577.3424035935093
transformed_value = 0.31222061116370275
---------------------
input_value = 1577.3430161583228
transformed_value = 0.3122206111637028
---------------------
input_value = 1577.343628717164
transformed_value = 0.3122206111637028
---------------------
input_value = 1577.3442412822144
transformed_value = 0.3122206111637028
---------------------
input_value = 1577.3448538412915
transformed_value = 0.31222061116370287
---------------------
input_value = 1577.3454664004878
transformed_value = 0.31222061116370287
---------------------
input_value = 1577.3460789675948
transformed_value = 0.31222061116370287
---------------------
input_value = 1577.3466915270276
transformed_value = 0.31222061116370287
---------------------
input_value = 1577.3473040926692
transformed_value = 0.3122206111637029
---------------------
input_value = 1577.3479166523382
transformed_value = 0.312220611163703
---------------------
input_value = 1577.3485292121259
transformed_value = 0.312220611163703
---------------------
input_value = 1577.3491417781227
transformed_value = 0.312220611163703
---------------------
input_value = 1577.3497543381466
transformed_value = 0.31222061116370303
---------------------
input_value = 1577.3503669043796
transformed_value = 0.31222061116370303
---------------------
input_value = 1577.3509794646407
transformed_value = 0.3122206111637031
---------------------
input_value = 1577.3515920250193
transformed_value = 0.3122206111637031
---------------------
input_value = 1577.352204591608
transformed_value = 0.3122206111637031
---------------------
input_value = 1577.352817152223
transformed_value = 0.31222061116370314
---------------------
input_value = 1577.353429719048
transformed_value = 0.31222061116370314
---------------------

尝试使用该公式手动计算给予类似的结果。使用math库也没有帮助。

res = (np.power(((x)+1), lambda) - 1) / lambda

有什么办法处理这个问题吗?

vof42yt1

vof42yt11#

你要计算的函数的斜率非常小。下面是derivative of your function

1/(1 + x)^4.2028635015981934

在x=1577时进行计算,结果约为10^-14。因此,如果将x改变1,输出将改变10^-14。因为你改变了大约10^-3,所以输出的变化大约是10^-17。双精度浮点数只有15到16位精度。
有什么办法处理这个问题吗?
你可以使用不同的公式。这个问题并没有描述你为什么要使用这个转换,所以我不知道该推荐什么。

相关问题