我经常看到机器学习中的数值被缩放到 0-1 范围。为什么更好?
我的训练集中有一些温度值。如果我有一些值可以预测超出训练集的值怎么办?
我的意思是,例如在训练集中,我将有 5-20 之类的温度范围,MinMaxScaler 将适合这些值,然后我将有 25 个来预测。
我经常看到机器学习中的数值被缩放到 0-1 范围。为什么更好?
我的训练集中有一些温度值。如果我有一些值可以预测超出训练集的值怎么办?
我的意思是,例如在训练集中,我将有 5-20 之类的温度范围,MinMaxScaler 将适合这些值,然后我将有 25 个来预测。
正如@Daniel Chepenko 指出的那样,有些模型是强大的 wrt 特征转换(如随机森林)。但是对于对特征进行操作的模型(如神经网络),通常需要对数据进行归一化,原因有以下三个:
1)数值稳定性:计算机不能代表每个数字,因为使它们存在的电子处理二进制(零和一)。所以他们使用基于浮点算法的表示。实际上,这意味着 [0.0, 1.0] 范围内的数值行为与 [1'000'000.0, 1'000'001.0] 范围内的数值行为不同。因此,拥有两个具有非常不同尺度的特征会导致数值不稳定,最终导致模型无法学习任何东西。
2) 梯度控制:假设你有一个跨越 [-1, 1] 范围的特征,另一个跨越 [-1'000'000, 1'000'000] 范围的特征:权重与第一个特征相关联的对小的变化更加敏感,因此它们的梯度将在该特征描述的方向上变得更加可变。这可能会导致其他不稳定性:某些学习率 (LR) 值对于一个特征可能太小(因此收敛速度会很慢),但对于第二个特征来说太大(因此您会跳过最优值)。因此,在训练过程结束时,您将拥有一个次优模型。
3) 控制数据的方差:如果你有偏斜的特征,并且你不转换它们,你就有风险模型会简单地忽略分布尾部的元素。在某些情况下,尾部比大部分分布提供的信息要多得多。
这实际上取决于您使用的算法。例如,对于random forests范围无关紧要,因为一个特征永远不会在大小上与其他特征进行比较。它只是在每个阶段拆分的一个功能的范围。
但另一方面,如果您的特征具有大致相同的量级,SVM或者Logistic regression可能会做得更好,除非您先验地知道某些功能比其他功能更重要,在这种情况下,它可以具有更大的量级。
数据通常会进行标准化,以确保您的所有特征都在大致相同的规模上,并且您测量数据的单位不会对您最终拟合的模型产生影响。
如果您在训练集中有 5-20 范围内的数据,那么在测试集中,您的 25 将通过缩放映射到 1.33(这就是为什么 Scaler 适合训练数据,因此您可以在整个训练中获得一致的映射和测试数据)。这根本不是问题,因为您的模型并不真正依赖于 [0,1] 中的数据。
我将尝试通过一个例子来解释它。
想象一下,你有两个属性的问题,温度(摄氏度)和长度(毫米)。这个问题需要根据夏季温度和长度的变化对长结构金属梁的质量进行分类。
“长”意味着它们可以长达 2 米,即 [0-2000]mm 范围。请记住,金属棒会因温度变化而延伸/收缩。夏季,该特定位置的温度在 [20-35] 摄氏度之间变化。
假设您想使用 K-means 聚类对长度和温度的每小时样本进行聚类。在算法的每次迭代中,欧几里得距离通常是衡量聚类中心与其他样本之间距离的首选。这意味着温度相似(+-1 摄氏度)但长度差异很大(1000 毫米)的棒将处于不同的簇中;但这可能会产生误导。
出于这个原因,您应该缩放 [0,1] 范围内的所有维度,以便聚类距离与测量单位没有偏差。
请记住,工程问题中的不同单元通常需要最小最大缩放,以具有以公平方式有助于分类结果的特征。