使用numpy结构化数组做StandardScale时遇DeprecationWarning求助
解决StandardScaler处理结构化numpy数组的警告问题
嗨,作为刚接触数据科学和Python的新手,遇到这个警告很正常,我来帮你捋清楚问题出在哪,以及怎么解决!
为什么会出现这个警告?
StandardScaler 要求输入必须是2维数组,也就是形状为 (样本数量, 特征数量) 的格式。而你用的是结构化numpy数组,直接把整个数组传给Scaler的话,它会把每个样本(包含input和output的元组)当成一个单独的元素,这样就变成了1维数组,正好触发了这个版本兼容警告。
正确的处理步骤
首先我们要把输入特征和输出标签从结构化数组里单独提取出来,转换成Scaler能识别的2维格式:
提取输入和输出数据
import numpy as np from sklearn.preprocessing import StandardScaler # 假设你已经定义了nb_samples nb_samples = 100 samples = np.zeros(nb_samples, dtype=[('input', float, 4), ('output', float, 1)] ) # 提取输入特征:此时X的形状是(nb_samples, 4),是标准的2维数组 X = samples['input'] # 提取输出标签:y的形状是(nb_samples, 1),也是2维;如果需要1维可以用y.squeeze() y = samples['output']分别对输入和输出做标准化
注意:一般来说,我们只需要对输入特征做标准化;如果是回归任务需要对输出做标准化,也可以按下面的方式处理:# 处理输入特征 scaler_X = StandardScaler() X_scaled = scaler_X.fit_transform(X) # 处理输出标签(如果需要的话) # 如果y是1维数组,需要先reshape成2维;这里我们提取的y已经是(nb_samples,1),可以直接用 scaler_y = StandardScaler() y_scaled = scaler_y.fit_transform(y)将缩放后的数据放回结构化数组(可选)
如果你想把处理后的数据存回原来的结构化数组里,只需要保证形状匹配即可:samples['input'] = X_scaled samples['output'] = y_scaled
额外提醒
- 不要直接把整个结构化数组传给
StandardScaler,一定要拆分出输入和输出分别处理。 - 后续深度学习模型训练时,大多也需要输入是
(样本数, 特征数)的2维格式,这样处理后也能和模型输入要求对齐。
内容的提问来源于stack exchange,提问作者ajlaj25
相关产品推荐
相关产品推荐

