Sklearn的MinMaxScaler只返回零



我正在尝试使用preprocessingsklearn将某个数字缩放到0-1的范围。我就是这么做的:

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([data])
print data_scaled

但是data_scaled只包含零。我做错了什么?

当我尝试使用sklearn.preprrocessing中的MinMaxScaler进行缩放时,我也遇到了同样的问题。当我使用numpy数组作为列表时,Scaler返回了零,即[1,n],如下所示:

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

我将数组的形状改为[n,1]。在您的情况下,它希望以下

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

然后MinMaxScaler以正确的方式工作。

这是因为数据是int32或int64,并且MinMaxScaler需要一个浮点值。试试这个:

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
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

这背后的原因是,当你试图将StandardScaler对象的fit_transform方法应用于大小为(1,n)的数组时,你显然会得到全零,因为对于数组的每个数字,你从中减去这个数字的平均值,这个数字等于这个数字,除以这个数字的std。如果您想获得正确的数组缩放比例,您应该将其转换为大小为(n,1)的数组。

请参阅此链接的正确答案:

他们已经给出了正确的答案,但我使用函数numpy.vstack(<your array>)解决了我的问题,在你的问题中,你可以这样写:

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.vstack(data))
print(data_scaled)
#If you want to return in original format you can use 
#hstack function
data_scaled = np.hstack(data_scaled)

`

您出于某种原因将数据放入列表中,但不应该:

data_scaled = min_max_scaler.fit_transform(data)

相关内容

  • 没有找到相关文章

最新更新