我正在尝试使用preprocessing
从sklearn
将某个数字缩放到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)