提问人:Roman 提问时间:5/17/2023 最后编辑:desertnautRoman 更新时间:5/18/2023 访问量:69
sklearn.preprocessing.PowerTransformer 为不同的输入返回相同的值。我该如何处理?
sklearn.preprocessing.PowerTransformer returns the same values for different inputs. How can I deal with it?
问:
有一个合适的.我将其应用于新数据,并看到对应于不同输入的连续相同值。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
有什么方法可以解决这个问题吗?
答:
0赞
Nick ODell
5/18/2023
#1
您正在评估的函数的斜率非常小。下面是函数的导数:
1/(1 + x)^4.2028635015981934
在 x=1577 处评估这一点,你得到大约 10^-14。因此,如果将 x 更改 1,则输出将更改 10^-14。由于您将其更改为 10^-3,因此输出的变化大约为 10^-17。双精度浮点数只有 15 到 16 位精度。
有什么方法可以解决这个问题吗?
您可以使用其他公式。这个问题没有描述你为什么要使用这个转换,所以我不知道该推荐什么。
评论
0赞
Roman
5/23/2023
我正在解决在不降低质量的情况下最小化成本的任务,借助 ML 来估计质量。现在,我的数据在某个方向上略有变化,但 ML 模型会产生目标变量的波动值。我开始寻找原因,发现在应用数据准备管道(生成多项式特征和 Yeo-Johnson 变换)后,线性变化的特征在 PT 之后变成了阶梯形状。你可以在这里找到图片(dropmefiles.com/NN8xM)
评论