MNIST 数据集的均值和偏差是如何得出的?

数据挖掘 神经网络 多标签分类 极简主义
2021-10-15 03:49:29

我是数据科学的新手,我注意到一些存储库声明了MNIST 数据集中的mean.deviation0.13070.3081

我无法想象这两个数字是怎么来的。根据我的理解,MNIST 数据集有 60,000 张图片,每张图片都有 (28 * 28 = 784) 个特征。如何转换此特征向量以获得均值和偏差?

特别是,这应该按标签分类,对吧?例如,数字 0 应该有它的meanand deviation对于数字 1 也应该有它的meanand deviation

3个回答
  • mean:它是数据集中所有像素值的平均值(60000 × 28 × 28)。这个平均值是在整个数据集上计算的。
  • deviation:是所有像素值的标准差。数据集被视为总体而不是样本。

这些值有什么用?

在这种情况下,平均值和标准差通常用于标准化图像中的数据。标准化数据的平均值接近 0,标准差接近 1。您可以在此处阅读更多信息。

为什么要标准化数据?

标准化以具有单位方差的方式转换您的数据。根据维基百科,

在统计学中,标准分是有符号的标准差数,通过该标准差,观察值或数据点的值高于正在观察或测量的平均值

存储库只是说明在所有特征和所有示例中,平均值为0.1307,标准差为0.3081如果您将 mnist 训练集加载到numpy名为 的数组中,您可以自己获取这些值mnist,只需评估方法mnist.mean()mnist.std()

希望能帮助到你!

self.train_x_set = self.train_x_set / 255.
mean = 0
std = 0
for x in self.train_x_set:
    mean += np.mean(x[0, :, :])
mean /= len(self.train_x_set)
self.train_x_set -= mean
for x in self.train_x_set:
    std += np.mean(np.square(x[0, :, :]).flatten())
std = np.sqrt(std / len(self.train_x_set))