【问题标题】:Numpy: Inverse Transforming Different Size ArrayNumpy:逆变换不同大小的数组
【发布时间】:2017-02-21 11:54:26
【问题描述】:

我正在尝试规范化我的数据,对其进行一些工作,然后将其更改回来。在进行 inverse_transform 时,我是否必须始终传递与进行 fit_transform 时完全相同的形状?下面的代码会给我一个“形状 (3,1) 的不可广播输出操作数与广播形状 (3,3) 不匹配”

import numpy as np
from sklearn.preprocessing import MinMaxScaler

first = np.array([[  1.2345, 1.220000,1.26245],
 [  1.234,1.220000,7.0901],
 [  1.23450,1.22000,1.14795]])

scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(first)
new_dataset = dataset[:,:1]
trainPredict2 = scaler.inverse_transform(new_dataset)

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您不必传递形状完全相同的数据集,但列数必须与原始数据集相匹配,因为每一行都被解释为一条记录,每一列都被解释为一个特征。从技术上讲,您不能错过测试数据集的功能。因此,例如,切片行仍然有效:

    new_dataset = dataset[:1,:]
    trainPredict2 = scaler.inverse_transform(new_dataset)
    

    这会返回原始数据集的第一行:

    trainPredict2
    # array([[ 1.2345 ,  1.22   ,  1.26245]])
    

    如果你真的想反演一两个特征,你可以通过反演最小值-最大值变换x′:=(x−xmin)/(xmax−xmin)公式来计算:

    scaler.data_range_[:1] * dataset[:,:1] + scaler.data_min_[:1]
    # array([[ 1.2345],
    #        [ 1.234 ],
    #        [ 1.2345]])
    

    这会返回原始数据集的第一列。

    【讨论】:

    • 所以如果我的数据只包含 1 列,我不能再次反转它吗? new_dataset 只是我的数据在我使用它后的外观的一个示例。
    • 我想做的是,在对我的数据集进行预测后,我得到一个仅在 1 列(预测)中的数组,当我执行 fit_transform 时,它位于多列中。现在我想使用 inverse_transform 将预测转换回常规格式,但我得到了不同的形状。
    • 为什么需要对预测进行逆变换?缩放仅适用于功能。你的意思是你事先对标签应用了比例转换?如果是这样,您可能需要重塑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多