Angenommen, wir werfen eine Münze 50 mal. Sie zeigt 20 mal "Kopf" und 30 mal "Zahl".
Die Frage die wir uns jetzt stellen ist, ob wir es mit einer fairen Münze zu tun haben.
Hierzu probieren wir drei Möglichkeiten vorzugehen, um herauszufinden, ob wir es mit einer fairen Münze zu tun gehabt haben.
Gegeben Sei \(X\) eine 1-d Zufallsvariable und seien weiter \(x_1, \dots, x_n\) beobachtete Werte dieser Zufallsvariable.
Dann ist \(
\overline x_k := \frac{1}{k} \sum_i x_i
\) der Mittelwert und \(
\sigma_k := \frac{1}{k} \sum_i \left(x_i - \overline x_k\right)^2
\) die Varianz des (Teil-)Datensatzes \((x_1,\dots,x_k)\).
Erwartungswert:
Die folgende Umformung führt zu der Online-Variante dieser Berechnung: \[
\overline x_n := \overline x_{n-1} + \frac{x_n - \overline x_{n-1}}{n}.
\]
Varianz:
Ganz ähnlich lässt sich auch die online-Berechnung der Varianz herleiten: \[
\sigma_n^2 = \frac{(n-1)\sigma_{n-1}^2+(x_n - \overline x_{n-1})(x_n-\overline x_n)}{n} = \sigma^2_{n-1} + \frac{(x_n - \overline x_{n-1})(x_n - \overline x_n) - \sigma^2_{n-1}}{n}.
\] Diese Art die Varianz zu bestimmen kann jedoch zu numerischen Problemen führen — wir subtrahieren hier eine potentiell sehr kleine Zahl von einer beliebig großen Zahl. Eine numerisch stabilere Variante nutzt den linken Teil der Gleichung bzw. die Tatsache, dass die Formel der Standardabweichung die Summe aller Differenzen vom Mittelwert enthält: \[
\begin{align}
M_{2,n} &= M_{2,n-1} + (x_n - \overline x_{n-1})(x_n - \overline x_n)\\
\sigma^2_n &= \frac{M_{2,n}}{n}.
\end{align}
\]
Gegeben Sei ein zufälliger 1-d Datensatz. Der Einfachheit halber nehmen wir hier eine normalverteilte Zufallsvariable \(X \sim \mathcal{N}_{0,1}\) an.
torchvision
einmal kennen zu lernen. Wir werden später im Semester einen weiteren Datensatz verwenden.
torchvison
.)import matplotlib.pyplot as plt
import numpy as np
# functions to show an image
def imshow(img):
img = img / 2 + 0.5 # unnormalize
npimg = img.numpy()
plt.imshow(np.transpose(npimg, (1, 2, 0)))
plt.show()
batch_size = 64 # number of images to get for every iteration of trainloader
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=True, num_workers=2)
classes = ('class-%i' % i for i in range(10))
# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()
# show images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s' % classes[labels[j]] for j in range(batch_size)))