我正尝试使用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只包含零。我究竟做错了什么?
答案 0 :(得分:6)
当我尝试使用sklearn.preprocessing中的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以适当的方式工作。
答案 1 :(得分:5)
这是因为数据是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
答案 2 :(得分:1)
您出于某种原因将数据放入列表中,但您不应该:
data_scaled = min_max_scaler.fit_transform(data)
答案 3 :(得分:1)
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)的数组。
查看此link的正确答案: