Sklearn's MinMaxScaler only returns zeros

前端 未结 4 1492
情话喂你
情话喂你 2021-01-12 20:12

I am trying to scale a some number to a range of 0 - 1 using preprocessing from sklearn. Thats what i did:

data = [44.645, 44.055,          


        
相关标签:
4条回答
  • 2021-01-12 20:57

    You're putting your data into a list for some reason, but you shouldn't:

    data_scaled = min_max_scaler.fit_transform(data)
    
    0 讨论(0)
  • 2021-01-12 21:04

    I had the same problem when I tried scaling with MinMaxScaler from sklearn.preprocessing. Scaler returned me zeros when I used a shape a numpy array as list, i.e. [1, n] which looks like the following:

    data = [[44.645, 44.055, 44.54, 44.04, 43.975, 43.49, 42.04, 42.6, 42.46, 41.405]]
    

    I changed the shape of array to [n, 1]. In your case it would like the following

    data = [[44.645], 
            [44.055], 
            [44.540], 
            [44.040], 
            [43.975], 
            [43.490], 
            [42.040], 
            [42.600], 
            [42.460], 
            [41.405]]
    

    Then MinMaxScaler worked in proper way.

    0 讨论(0)
  • 2021-01-12 21:08

    This is because data is a int32 or int64 and the MinMaxScaler needs a float. Try this:

    import numpy as np
    data = [44.645, 44.055, 44.54, 44.04, 43.975, 43.49, 42.04, 42.6, 42.46, 41.405]
    min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
    data_scaled = min_max_scaler.fit_transform([np.float32(data)])
    print data_scaled
    
    0 讨论(0)
  • 2021-01-12 21:13
    data = []
    data = np.array(data)
    data.append([44.645, 44.055, 44.54, 44.04, 43.975, 43.49, 42.04, 42.6, 42.46, 41.405])
    min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
    data_scaled = min_max_scaler.fit_transform(data.reshape(10,-1))
    data = data_scaled.reshape( -1, 10)
    print data
    

    The reason behind this is when you're trying to apply fit_transform method of StandardScaler object to array of size (1, n) you obviously get all zeros, because for each number of array you subtract from it mean of this number, which equal to number and divide to std of this number. If you want to get correct scaling of your array, you should convert it to array with size (n, 1).

    See the correct answer of this link :

    0 讨论(0)
提交回复
热议问题