scikit-learn - MinMaxScaler:TypeError:ufunc'sundract'

时间:2018-05-14 11:40:30

标签: python numpy scikit-learn

我在scikit-learn中使用MinMaxScaler时遇到问题,无法正确解释错误消息,也无法找到相关信息。

TypeError: ufunc 'subtract' output (typecode 'O') could not be coerced to provided output parameter (typecode 'd') according to the casting rule ''same_kind''

为了适合我使用了以下格式的矩阵: (275,821),numpy.ndarraynumpy.float64

正确转换的输出是: (275,821),numpy.ndarraynumpy.float64

我使用inverse_transform输入“返回”: (206,821),numpy.ndarraynumpy.float64

之前我已经完成了这项工作并且没有任何问题。 显然我的数据有些不同,我看不到,与格式无关? 如果有人能够解释错误信息或者给我另一个关于出了什么问题的提示,我会很高兴。

numpy 1.13.1, 大熊猫0.20.3, scikit-learn 0.19.0, python 2.7.6

非常感谢!

我发现MinMaxScalers属性已由joblib单独保存。 min_属性似乎是:joblib.numpy_pickle.NDArrayWrapper at 0x7fbc302253d0

澄清:我使用joblib保存缩放器并在inverse_transform之前加载它。

### X and Y are two matrices with values between 0-6000

X_frame = pd.DataFrame(X)
Y_frame= pd.DataFrame(Y)

XYdata = pd.concat([X_frame, Y_frame], axis=1)
XYdata = XYdata.as_matrix()
mm = MinMaxScaler((0,1))
XY_new = mm.fit_transform(XYdata)

np.save('data',XY_new)
filename_scaler = 'scaler.sav'
joblib.dump(mm, filename_scaler)

### There's a prediction algorithm in between I can't add because of company restrictions, the code returns the matrix data 

scaler = joblib.load('scaler.sav')
new_data1 = scaler.inverse_transform(data)

1 个答案:

答案 0 :(得分:0)

解决了它。

joblib.dump(mm, filename_scaler, compress =1)

问题是joblib分别保存了缩放器的所有属性,显然没有加载它们。

将压缩级别设置为1(True)解决了这个问题。

感谢阅读和/或回复的所有人。