2017-02-21 13 views
1

私はデータを正規化し、その上でいくつかの作業をしてからそれを元に戻しています。 inverse_transformを実行するときは、fit_transformを行ったときとまったく同じ形で渡す必要がありますか?以下のコードは、データセットを渡す必要はありません「形状(3,1)と非broadcastable出力オペランド放送形状(3,3)と一致しない」Numpy:異なるサイズの変換を逆変換する

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) 

答えて

0

私を与えますまったく同じ形状ですが、各行がレコードとして解釈され、各列がフィーチャとして解釈されるため、列の数は元のデータセットと一致する必要があります。技術的には、テストデータセットの機能を逃すことはできません。だから、例えば、スライスは、行はまだ動作します:

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

これはあなたの元のデータセットの最初の行をバック与える:あなたは本当に一つまたは二つの特徴を逆にしたい場合は

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

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

これをバック変換すると、次の式が得られます。 k元のデータセットの最初の列。

+0

私のデータが1列のみで構成されている場合、私は再びそれを反転することはできませんか? new_datasetは、私がデータを操作した後にデータがどのように見えるかの一例に過ぎません。 –

+0

私がしようとしているのは、私のデータセットの予測をしたあと、ちょうど1列(予測)の配列を取得します。ここでは、fit_transformを複数の列に配置しました。今私はinverse_transformを使用して正規表現に予測を変換したいが、IMは異なる形を得る。 –

+0

予測を逆変換する必要があるのはなぜですか?スケーリングは機能のためのものです。あらかじめスケール変換をラベルに適用しているということですか?もしそうなら、あなたはおそらく変形を必要とします – Psidom

関連する問題