Publié le 13 avril 2020
De nos jours, la recherche sur l'apprentissage automatique se fait principalement en langage python. Parce qu'il existe de nombreuses bibliothèques (appelées modules) en python pour l'analyse et le calcul de données à grande vitesse. Parmi eux, cette fois, nous utiliserons un module appelé ** pyTorch ** et parlerons de ** torch.var () ** dedans. En conclusion, le calcul par ** torch.var () ** n'est pas une variance mais une ** variance sans biais (variance de l'échantillon) **. En fait, dans de nombreuses bibliothèques statistiques, ** variation ** semble se référer à ** variance non biaisée ** (je ne savais pas, mais les statisticiens le tiennent pour acquis). Je vais en fait présenter cette histoire à travers le programme.
Cependant, cet article est comme votre propre mémo, et je souhaite que vous l'utilisiez comme référence uniquement, et il se peut que vous utilisiez des expressions ou des phrases incorrectes par souci de concision, mais comprenez cela. Je veux que tu le fasses.
Je voudrais que vous puissiez utiliser numpy et pyTorch de python dans une certaine mesure comme connaissance préalable. Dans cet article, nous allons procéder avec un corps qui peut être utilisé naturellement. Pour référence, reportez-vous à l'article sur le type Tensor de pyTorch dans le lien suivant.
Qu'est-ce que le type de pyTorch Tensor
Tout d'abord, avant d'écrire le programme, je vais montrer les formules pour la moyenne $ \ mu $, la variance $ \ sigma ^ 2 $ et la variance non biaisée $ s ^ 2 $.
\mu = \frac{1}{n}\sum_i^n x_i\\
\sigma^2 = \frac{1}{n}\sum_i^n (x_i-\mu)^2\\
s^2 = \frac{1}{n-1}\sum_i^n (x_i-\mu)^2
Où $ x $ est l'échantillon d'entrée et $ n $ est le nombre d'échantillons.
Les exemples de données sont définis comme suit.
filename.rb
a = torch.tensor([1.,2.,3.,4.,5.])
print(a)
------'''Résultat de sortie ci-dessous'''--------
tensor([1., 2., 3., 4., 5.])
Eh bien, tout d'abord, si vous essayez de trouver la dispersion normalement
filename.rb
mu = torch.mean(a)
var = torch.mean((a - mu)**2)
print(var)
------'''Résultat de sortie ci-dessous'''--------
tensor(2.)
Ici, ** torch.mean () ** calcule la moyenne de tous les éléments d'entrée. Ainsi, la variance s'est avérée être de 2,0.
Maintenant, utilisons ** torch.var () ** de pytorch.
filename.rb
var = torch.var(a)
print(var)
------'''Résultat de sortie ci-dessous'''--------
tensor(2.5000)
Et la valeur a changé. Cette réponse est la raison pour laquelle ** torch.var () ** ne demande pas de distribution. En fait, ** torch.var () ** trouve la ** variance sans biais (variance de l'échantillon) ** de tous les éléments d'entrée.
Il est important de noter lorsque vous utilisez réellement ** torch.var () **, mais ce n'est pas toujours le cas que vous devriez éviter de l'utiliser si vous prévoyez une distribution. En effet, comme le montre l'équation, lorsque le nombre d'échantillons est très grand, les valeurs sont presque les mêmes (si n est 1000, la variance divisée par 1000 et la variance non biaisée divisée par 999 sont presque les mêmes). Si vous faites ** avec un petit nombre d'échantillons ** comme mon exemple cette fois, vous devez être prudent.
Cette fois, j'ai résumé les choses sur torch.var (). C'est peut-être une évidence, mais j'ai été surpris alors je l'ai écrit sous forme d'article. De plus, comme j'ai peu de connaissances sur la signification solide de la dispersion et de la dispersion non biaisée, je voudrais que vous signaliez chaleureusement toute erreur d'expression. Je pense qu'il y avait de nombreux points difficiles à lire, mais merci d'avoir lu.
Recommended Posts