我有一个关于如何正确缩放我的数据集的问题。
我的数据集包括
-
一个我目前以秒存储的日期
-
一个介于1到5之间的数值
-
大约240个布尔值,1或0
所以一行数据看起来像这样
[1514761200, 3, 1, 1, 0, 0, 1, 0, 1, ......]
我尝试使用scikit StandardScaler
进行缩放,但结果出现了一些非常奇怪的值,有些0保持为0,而其他值被缩放到类似-1.736的数值。当我对数据应用inverse_transform时,一些布尔值仍然是奇怪的数字。
我认为问题可能出在日期列的巨大数值上,但我不是很确定。
如果是这样的话,有没有更好的处理日期的方法?或者一般来说,如何处理那些与其他数据不匹配但又必需的1/2列数据呢?
谢谢。
回答:
在大多数情况下,缩放是分别应用于每个特征的,这就是StandardScaler所做的。因此,一些0保持为0而其他0被转换是完全正常的。请看以下代码
int_mat = np.array([[0,0],[0,1],[0,2]])
输出
array([[0, 0], [0, 1], [0, 2]])
现在我们进行缩放
from sklearn.preprocessing import StandardScalerssc = StandardScaler()int_scaled = ssc.fit_transform(int_mat)inverse_scaling = ssc.inverse_transform(int_scaled)
int_scaled
array([[ 0. , -1.22474487], [ 0. , 0. ], [ 0. , 1.22474487]])
如你所见,第一个特征(第一列)保持不变,因为它已经具有零均值。
逆变换结果为原始矩阵
inverse_scaling
array([[0.00000000e+00, 1.11022302e-16], [0.00000000e+00, 1.00000000e+00], [0.00000000e+00, 2.00000000e+00]])