# How to use inverse_transform in MinMaxScaler for pred answer in a matrix

I am working on a data, for preding output, I used SVR by bellow code:

from sklearn.svm import SVR
regressor = SVR(kernel = 'linear')
regressor.fit(trainX,trainY)

from sklearn.metrics import r2_score
pred = regressor.predict(testX)
print(pred)


The answer is : [0.58439621 0.58439621 0.58439621 ... 0.81262134 0.81262134 0.81262134]. I'm trying to inverse the scaling to real amount.

I search it in StackOverflow and reach this: https://stackoverflow.com/questions/49330195/how-to-use-inverse-transform-in-minmaxscaler-for-a-column-in-a-matrix, I implement every 2 answers in my code, but I get error yet. Can anyone help me with this?

I write this from above source:

import sklearn
from sklearn.preprocessing import MinMaxScaler
scale=sklearn.preprocessing.MinMaxScaler()
scale.min_,scale.scale_=scaler.min_[0],scaler.scale_[0]
scale.inverse_transform(pred)


but, I got same error as:

Blockquote Expected 2D array, got 1D array instead: array=[0.58439621 0.58439621 0.58439621 ... 0.81262134 0.81262134 0.81262134]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample. Blockquote

From my understanding you are working on a regression task in which you have applied MainMaxScaler to your target variable y prior modeling.

If so you have two options:

1. As the error message suggests, you can reshape the output with array.reshape(-1, 1)

2. Scikit learn has implemented a class to work with transformations on target:

So just try

from sklearn.svm import SVR
from sklearn.compose import TransformedTargetRegressor
from sklearn.metrics import r2_score
from sklearn.preprocessing import MinMaxScaler

regressor = SVR(kernel = 'linear')

model = TransformedTargetRegressor(regressor= regressor,
transformer = MinMaxScaler()
).fit(trainX,trainY)

pred = model.predict(testX)
print(pred)


Every time you make a model.predict(X) it will apply an inverse transformation so that your predictions are in the same scale as prior MinMaxScaler

EDIT:

Working example of transformation without using Scikit-learn

# array example is between 0 and 1
array = np.array([0.58439621, 0.81262134, 0.231262134, 0.191])
#scaled from 100 to 250
minimo = 100
maximo = 250
array * minimo + (maximo - minimo)


Returns:

array([208.439621 , 231.262134 , 173.1262134, 169.1])

• Thanks. That was so helpful. I have a question, you know by normalization the pred scale is between 0 and 1. now, how could I transfer this scale to the data scale (real value). for example:[0.58439621 0.58439621 0.58439621 ... 0.81262134 0.81262134 0.81262134], the pred answer transfer to :[250 100 50 60 .....]. – ramin Feb 18 at 8:20
• thanks@Julio Jesus, you help me. – ramin Feb 18 at 18:53