我根据它的列缩放了一个矩阵,如下所示:
scaler = MinMaxScaler(feature_range=(-1, 1))
data = np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])
scaler = scaler.fit(data)
data_scaled = scaler.transform(data)
data_scaled
给了我以下内容:
array([[-1. , -1. ],
[-0.5, -0.5],
[ 0. , 0. ],
[ 1. , 1. ]])
这是期望的输出。但是,我试图反转该矩阵第一列的缩放比例,所以我尝试了以下操作(错误显示在每行代码下方):
scaler.inverse_transform(data_scaled[:,1].reshape(1,-1))
Traceback (most recent call last):
File "c:\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-38-6316f51586e7>", line 1, in <module>
scaler.inverse_transform(data_scaled[:,1].reshape(1,-1))
File "c:\anaconda3\lib\site-packages\sklearn\preprocessing\data.py", line 385, in inverse_transform
X -= self.min_
ValueError: operands could not be broadcast together with shapes (1,4) (2,) (1,4)
另外,我试过:
scaler.inverse_transform(data_scaled[:,1].reshape(-1,1))
Traceback (most recent call last):
File "c:\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-39-397382ddb3fd>", line 1, in <module>
scaler.inverse_transform(data_scaled[:,1].reshape(-1,1))
File "c:\anaconda3\lib\site-packages\sklearn\preprocessing\data.py", line 385, in inverse_transform
X -= self.min_
ValueError: non-broadcastable output operand with shape (4,1) doesn't match the broadcast shape (4,2)
那么,如何重新缩放该矩阵的第一列?
最佳答案
scaler
记住您向它传递了一个包含两列的 2D 输入,并假设传递给它的所有后续数据都将具有相同数量的特征/列。
如果它只是您想要的第一列,您仍然需要向inverse_transform
传递一个具有相同列数 的输入。从结果中取出第一列并丢弃其余列。
scaler.inverse_transform(data_scaled)[:, [0]]
array([[-1. ],
[-0.5],
[ 0. ],
[ 1. ]])
这有点浪费,但也是 sklearn API 的限制。
关于python - 如何在 MinMaxScaler 中对矩阵中的列使用 inverse_transform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330195/