我是 python 和数据科学的新手(数学不太好)。我正在学习机器学习。我得到了以下规范化功能。你能解释一下这个规范化功能是做什么的吗?
def normalize(array):
return (array - array.mean()) / array.std()
还请解释一下这array - array.mean()
是做什么的?
我是 python 和数据科学的新手(数学不太好)。我正在学习机器学习。我得到了以下规范化功能。你能解释一下这个规范化功能是做什么的吗?
def normalize(array):
return (array - array.mean()) / array.std()
还请解释一下这array - array.mean()
是做什么的?
还请解释这个数组 - array.mean() 做什么?
基本上,它是在广播之后进行成员减法运算。np.mean
函数在你的数组中找到平均值,它的结果将是一个标量,一个单一的数字。您的数组是一个numpy
数组,后一项的结果是前面提到的单个值。因此,单个值被扩展到前一项的形状。然后将对数组的每个条目执行成员减法,结果将具有与前一项相同的形状。
你能解释一下这个规范化功能是做什么的吗?
规范化数据是为了加速优化。如果你有不同尺度的特征,你的优化器函数将花费太多时间来找到最佳点。假设您的年龄特征可以在 0 到 150(!)之间变化,而薪水可以从 0 变化到任何值,例如 500,000,000 美元。如果可能的话,您在 ML 模型中使用的优化算法将花费太多时间来为每个特征找到合适的权重。此外,如果您不扩展数据,您的 ML 算法可能会过于关注具有大尺度的特征。
黑盒答案是当你的特征有不同的范围(1-5 vs 1-5000)时,你不能训练模型。
我真的建议编写一个简单的梯度下降求解器(在线大量样本)并训练一个简单的线性模型(y=mX+b),其中目标解决方案类似于 y=5x+500。对于 m 和 b 具有固定的学习率 - 训练变得非常缓慢或不收敛并倒退。解决方案是标准化或缩放。
正如我所说,学习这一点的最佳方法是编写代码并进行实验。
标准方法是将输入缩放为具有零均值单位方差。
数学上:
如果您有一些观察到的数据(您的训练示例),称为经验分布,它是从未知数据分布生成的真实数据分布的代理。
您可以假设您的输入特征,每个维度都是从单变量高斯分布中得出的,您可以使用封闭形式解决方案中的最大似然估计来估计它,请参阅MLE for Gaussian并且您可以获得无偏均值和有偏方差可以固定为不偏不倚。之后,只需从原始均值中减去所有数据点就很简单,最终均值为零,然后通过除以固定的无偏方差将方差缩放为 1。