【问题标题】:Scaling features for machine learning机器学习的缩放特征
【发布时间】:2018-03-27 19:21:24
【问题描述】:

我有一个关于如何正确扩展我的数据集的问题。

它由

组成
  1. 我当前存储为秒的日期

  2. 一个介于 1 和 5 之间的值

  3. 还有大约 240 个布尔值 1 或 0

所以一行看起来像

[1514761200, 3, 1, 1, 0, 0, 1, 0, 1,  ......]

我尝试应用 scikit StandardScaler 但它会导致一些非常奇怪的值,一些 0 保持 0 其他被缩放到类似于 -1.736 的值。如果我随后在数据上应用 inverse_transform 一些布尔值保持奇怪的数字。

我认为问题在于日期列中的巨大数字,我不确定。

但是,如果是处理日期的更好方法,或者一般而言,我该如何处理 1/2 列,这些列不适合其余数据,但却是强制性的。

谢谢。

【问题讨论】:

  • 为什么要缩放分类数据?你有什么问题?您扩展的意图是什么?
  • 我的数据集的哪一部分是分类的?我只是想实现模型对待每个输入列的方式与我认为的缩放目的相同,即消除输入值大小之间的巨大差异。
  • 你能给我们看看代码吗?
  • 其实你可以使用缩放来摆脱特征中的偏差。这在梯度优化过程中可能很重要。如果您的大部分数据都是分类数据,那么您应该考虑可以很好地处理分类数据的树学习算法。布尔值是分类的一种特殊形式。你的值是 1 到 5 之间的整数吗?

标签: python machine-learning data-structures scikit-learn


【解决方案1】:

在大多数情况下,缩放分别应用于每个功能,这就是 StandardScaler 正在做的事情。因此,一些 0 保持为零,而另一些被转换是完全自然的。看下面的代码

int_mat = np.array([[0,0],[0,1],[0,2]])

输出

array([[0, 0],
   [0, 1],
   [0, 2]])

现在我们进行缩放

from sklearn.preprocessing import StandardScaler

ssc = 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]])

【讨论】:

  • 这让事情变得更加清晰,我认为缩放发生在与其他列相关的情况下,但现在更有意义了,谢谢
  • 但是在缩放分类数据时要小心!您应该对此有充分的理由,或者使用适用于处理分类数据的指标的算法
猜你喜欢
  • 2020-10-13
  • 2019-01-03
  • 2012-03-28
  • 2019-07-14
  • 1970-01-01
  • 2021-05-12
  • 2016-09-11
  • 2019-05-30
  • 1970-01-01
相关资源
最近更新 更多