[PYTHON] Statistiques de base et distribution gaussienne

Open In Colab

Le cahier jupyter est disponible ci-dessous.

https://gist.github.com/hnishi/544c77e35b98b737bbd004a1a9ac8924

Statistiques de base et distribution gaussienne

Résumé des statistiques Résumé

--Une statistique récapitulative est une valeur statistique qui résume généralement les caractéristiques de la distribution d'un échantillon et qui est un type de statistique.

Voici un exemple de statistique récapitulative

  1. Statistiques récapitulatives obtenues à partir des moments --Moyenne --Dispersion, écart type --Distorsion --Acuité
  2. Statistiques récapitulatives obtenues à partir de la commande
  1. Statistiques récapitulatives obtenues à partir de la fréquence

Statistiques récapitulatives obtenues à partir de moments


\mu = \frac{1}{\,N\,} \sum_{i = 1}^N x_i
\mu_m = \frac{1}{\,N\,} \sum_{i = 1}^N (x_i - \mu)^m \quad\ (m = 2, 3, \cdots)

Défini dans.

moyenne

Moment primaire autour de l'origine $ \ mu $. La somme divisée par le nombre.

\mu = \frac{1}{\,N\,} \sum_{i = 1}^N x_i

Dispersion, écart type

Statistiques obtenues à partir du moment central du second ordre. Représente la répartition de la distribution.

Distribution: $ \ sigma ^ 2 = \ mu_2 $ Écart type: $ \ sigma = \ sqrt {\ mu_2} $

asymétrie

Statistiques obtenues à partir du moment central du troisième ordre. Représente le degré d'asymétrie gauche-droite de la distribution.

\gamma_1 = \mu_3 / \sigma^3

kurtosis

Statistiques obtenues à partir du 4e moment central. Représente la netteté des pics de distribution (la largeur de la base).

\gamma_2 = \mu_4 / \sigma^4 - 3

Cependant, certaines définitions ne soustraient pas 3.

[1]: Le terme "* m * prochain moment central" est utilisé par Kei Takeuchi (représentant du comité de rédaction) "Dictionnaire des statistiques" Toyo Keizai Shinposha, D'après 1989.

Statistiques récapitulatives obtenues à partir de la commande


Ci-dessous, * N * données triées par ordre croissant Considérons une statistique (statistique d'ordre) pour $ x_1 \ le x_2 \ le \ dots \ le x_N $.

Médian

Médiane, médiane Aussi appelé. Données qui sont juste au centre de la taille des données x_{(N+1)/2} .. Cependant, la valeur médiane des coordonnées non entières est définie par interpolation linéaire (c'est-à-dire). $ X_ {N / 2} $ et $ x_ {(N + 1) / 2} $ quand * N * est pair Être la moyenne de).

Taille moyenne (moyenne de coupe)

Moyenne hors valeurs maximales et minimales. Si vous augmentez le nombre d'exclusions, la valeur finale sera la valeur médiane. Par conséquent, la valeur médiane est l'une des moyennes élaguées [^ 1].

Quart de point

Lors de la division d'un groupe en quatre parties égales par la taille de la valeur, la valeur qui devient la limite. $ x_ {(N + 3) / 4} $ Le premier quadrant, $ x_ {(3N + 1) / 4} $ Est appelé le troisième quadrant. $ x_ {(2N + 2) / 4} $ Autrement dit, le deuxième quadrant est la valeur médiane.

Minimum Maximum

La plus petite valeur $ x_1 $ et la plus grande valeur $ x_N $ dans la population.

Un diagramme de moustaches de boîte est utilisé pour visualiser ces statistiques.

Valeur médiane

La valeur obtenue en ajoutant la valeur maximale et la valeur minimale et en divisant par 2 est appelée valeur médiane et est parfois utilisée comme valeur représentative.

intervalle

La différence entre la valeur maximale et la valeur minimale est appelée plage et est parfois utilisée comme valeur représentative. Utilisez R comme symbole.

[^ 1]: Yasuo Nishioka, Tutoriel de mathématiques Parler doucement des statistiques de probabilité, Ohm, p.5, p.52013, ISBN 9784274214073

Statistiques récapitulatives obtenues à partir de la fréquence


Valeur la plus fréquente

Mode, nombre moyen Aussi appelé. Parmi les données, la valeur indiquant la fréquence la plus élevée dans la distribution de fréquence, c'est-à-dire la valeur des données qui apparaît le plus fréquemment.

Estimateur impartial de la variance


u^2 = \frac{1}{N-1} \sum_{i = 1}^N (x_i - \mu)^2

Dispersion impartiale $ u ^ 2 $

La variance normale de la population utilise la variance normale et la variance sans biais est utilisée pour déduire la variance de la population à partir de l'échantillon. La fonction Excel var () calcule la distribution non biaisée.

Dans le domaine de l'apprentissage automatique, la dispersion décrite ci-dessus est souvent utilisée à la place de la dispersion non biaisée. (Quoi que vous utilisiez, vous pouvez obtenir des résultats similaires et avoir presque la même interprétation.)

Référence: https://www.heisei-u.ac.jp/ba/fukui/pdf/stattext05.pdf

Essayez de trouver des statistiques récapitulatives à l'aide des données IRIS


――Qu'est-ce que les données IRIS?

Données réputées pour l'apprentissage automatique. IRIS signifie la fleur de "Ayame" et est distribué par l'UCI (Université de Californie, Irvine) comme données pour l'étude de l'apprentissage automatique et de l'exploration de données.

Les types d'Ayame sont les suivants.

--Setosa --Versicolore --Virginica

Ces données sont analysées à partir des informations suivantes.

L'unité est le cm.

image01

https://carp.cc.it-hiroshima.ac.jp/~tateyama/Lecture/AppEx/LoadCSV.html


import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
from sklearn import datasets
iris = datasets.load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['name'] = iris.target_names[iris.target]
#Vous pouvez facilement sortir les principales statistiques avec les pandas.
#Bien sûr, chacun peut être sorti individuellement, mais il est omis ici.
iris_df.describe()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000 1.199333
std 0.828066 0.435866 1.765298 0.762238
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
#Confirmation des données
plt.show(sns.pairplot(data=iris_df, hue='name', vars=iris.feature_names, diag_kind='hist', palette='spring'))

da_handson_basic_statistic_values_11_0.png

Covariance

Lorsqu'un échantillon a deux ou plusieurs quantités d'entités, la quantité d'entités 1, $ x ^ {\ left (1 \ right)} $ et la quantité d'entités 2, $ x ^ {\ left (2 \ right)} La covariance entre $ et est exprimée comme suit.

cov(x^{(1)}, x^{(2)}) = \frac{1}{N} \sum_{i = 1}^N (x^{(1)}_{i} - \mu^{(1)}) (x^{(2)}_{i} - \mu^{(2)})

S'il existe une corrélation positive entre les deux quantités de caractéristiques, il prend une valeur positive et s'il existe une corrélation négative, il prend une valeur négative. L'amplitude de la valeur indique la force de la corrélation. Cependant, ce n'est que lorsque les unités (échelles) des deux quantités d'entités sont identiques.

La covariance (matrice) sera utilisée dans l'analyse en composantes principales (analyse ACP), qui sera introduite la prochaine fois (?).

https://ja.wikipedia.org/wiki/%E5%85%B1%E5%88%86%E6%95%A3

Matrice de covariance-covariance (matrice de covariance, matrice de covariance)

Considérez le vecteur de colonne suivant. $ X_1, X_2, ..., X_m $ représentent m caractéristiques différentes.

\textbf{X}= \begin{bmatrix}X_1 \\ X_2 \\ \vdots \\ X_m \end{bmatrix}

Lorsque les éléments de ce vecteur sont des variables stochastiques dont les variances sont finies, la matrice Σ dont les éléments de («i», «j») sont les suivants est appelée matrice co-distribuée distribuée.

\Sigma_{ij} = \frac{1}{N} \sum_{i = 1}^m (X_{i} - \mu_{i}) (X_{j} - \mu_{j}) \quad\

N est le nombre d'échantillons. Autrement dit, une matrice dans laquelle les composants diagonaux sont dispersés et d'autres composants sont co-distribués est appelée matrice de co-dispersion distribuée.

Vous pouvez voir la covariance de toutes les paires d'entités.

La matrice de distribution de co-distribution de chaque caractéristique de l'ensemble de données d'iris est présentée ci-dessous sous forme de carte thermique. Les composants diagonaux sont dispersés et les autres composants sont co-dispersés. Par exemple, on peut voir qu'il existe une corrélation positive entre la longueur des pétales et la longueur des sépales.

import numpy as np

#Créer une matrice de covariance
cov_mat = np.cov(iris.data.T)
df = pd.DataFrame(cov_mat, index=iris.feature_names, columns=iris.feature_names)
ax = sns.heatmap(df, annot=True, center=0, vmin=-3, vmax=3)

da_handson_basic_statistic_values_15_0.png

Coefficient de corrélation

Puisque la valeur numérique de la covariance est déterminée par la taille de la valeur d'origine, il est difficile de l'interpréter lors de la comparaison de plusieurs variables avec des unités différentes. Par exemple, même si vous calculez la co-distribution de la population de chaque ville et les ventes de magasins de ramen sur une base municipale, il est difficile de comprendre la signification des chiffres.

Par conséquent, lorsque l'on examine la relation, il est courant d'utiliser le coefficient de corrélation.

Le coefficient de corrélation est la valeur de la covariance divisée par le produit des écarts-types de chaque variable. Le coefficient de corrélation prend une valeur de -1 à 1. Si 1, les valeurs des deux variables sont parfaitement synchronisées.

\rho = \frac{\sigma_{X Y}}{\sigma_X\sigma_Y}

$ \ rho $ représente le coefficient de corrélation, et X et Y représentent différentes quantités d'entités.

Le coefficient de corrélation peut être considéré comme une covariance normalisée (indiquant la pertinence des données sans être affectée par l'unité).

Distribution normale (distribution gaussienne, distribution gaussienne)

f(x)=\frac{1}{\sqrt{2\pi \sigma^2}} \exp \! \left( -\frac{(x-\mu)^2}{2\sigma^2} \right) \quad(x\in \mathbb{R} )

référence:

Essayez de créer artificiellement une distribution gaussienne

Vous trouverez ci-dessous un histogramme de données générées aléatoirement selon la distribution gaussienne et une superposition de la distribution gaussienne.

mu est la valeur moyenne (centre de distribution) sigma est l'écart type (largeur de distribution)

import numpy as np

#Génération aléatoire selon la distribution gaussienne
mu, sigma = 0, 1 # mean and standard deviatin
np.random.seed(1)
s = np.random.normal(mu, sigma, 1000)
import matplotlib.pyplot as plt

#Créer un histogramme
count, bins, ignored = plt.hist(s, 30, density=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
               np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
         linewidth=2, color='r')
plt.show()

da_handson_basic_statistic_values_20_0.png

Vous pouvez confirmer que la distribution change en modifiant les valeurs de mu et sigma. De plus, puisqu'il s'agit d'une fonction de densité de probabilité, on peut imaginer à partir de la valeur sur l'axe vertical qu'elle devient 1 lorsqu'elle est intégrée sur toute la section sur l'axe horizontal.


À propos, dans la normalisation effectuée pour aligner les échelles des quantités de caractéristiques, le traitement suivant est effectué.

x_{i_{std}} = \frac{x_i-\mu}{\sigma}

$ x_ {i_ {std}} $: Montant standardisé de la fonctionnalité $ x_i $ $ \ mu $: valeur moyenne $ \ sigma $: écart type

Ce processus convertit la valeur moyenne en 0 et l'écart type en 1. En d'autres termes, on peut dire que la distribution de chaque caractéristique est transformée de sorte qu'elle suit une distribution gaussienne avec un centre de 0 et une largeur de distribution de la même échelle, en supposant une distribution normale.

Cette méthode est plus pratique car elle est moins affectée par les valeurs aberrantes, par opposition à la mise à l'échelle min-max (souvent appelée normalisation), qui met à l'échelle les données à une plage limitée de valeurs. Je peux dire.


(Des mots tels que normalisation et normalisation sont souvent utilisés de manière assez vague dans certains domaines, et il est nécessaire d'en déduire leur signification en fonction de la situation. De plus, l'opération de $ x_i- \ mu $ est appelée normalisation moyenne, et l'opération de $ 1 / \ sigma $ est appelée mise à l'échelle des caractéristiques. )


Ce qui précède est une distribution gaussienne créée artificiellement, il est donc naturel que la distribution soit similaire à l'histogramme.

Appliquer la distribution gaussienne à l'ensemble de données iris

Maintenant, il semble que la fonction gaussienne s'intègre parfaitement dans les données naturelles, alors vérifions-la en utilisant le jeu de données iris.

#Ajustement du jeu de données d'iris avec la fonction gaussienne

import matplotlib.pyplot as plt

for i_column in iris_df.columns:
  if i_column == 'name':
    continue
  print(i_column)
  mu = iris_df[i_column].mean()
  sigma = iris_df[i_column].std()

  #Créer un histogramme
  count, bins, ignored = plt.hist(iris_df[i_column], 30, density=True)
  plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
                np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
          linewidth=2, color='r')
  plt.show()
sepal length (cm)

da_handson_basic_statistic_values_23_1.png

sepal width (cm)

da_handson_basic_statistic_values_23_3.png

petal length (cm)

da_handson_basic_statistic_values_23_5.png

petal width (cm)

da_handson_basic_statistic_values_23_7.png

Il semble que seule la largeur Sepal a une distribution gaussienne, mais d'autres caractéristiques n'ont pas de distribution gaussienne. D'après ces résultats, en regardant l'ensemble de données d'iris, la distribution gaussienne ne semble pas convenir pour représenter cette distribution.

Cela est probablement dû au fait que les données de plusieurs groupes (types d'iris) sont mélangées dans l'ensemble de données, essayez donc de dessiner une distribution gaussienne pour chaque étiquette (setosa, versicolor, virginica).

Dessinez une distribution gaussienne pour chaque étiquette (type iris)

#Regardons la distribution pour chaque type

for i_name in iris_df['name'].unique():
  print(i_name)
  df_tmp = iris_df[iris_df['name'] == i_name]
  print(df_tmp.shape)

  for i_column in df_tmp.columns:
    if i_column == 'name':
      continue
    print(i_column)
    mu = df_tmp[i_column].mean()
    sigma = df_tmp[i_column].std()

    #Créer un histogramme
    count, bins, ignored = plt.hist(df_tmp[i_column], 10, density=True)
    plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
                  np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
            linewidth=2, color='r')
    plt.show()
setosa
(50, 5)
sepal length (cm)

da_handson_basic_statistic_values_25_1.png

sepal width (cm)

da_handson_basic_statistic_values_25_3.png

petal length (cm)

da_handson_basic_statistic_values_25_5.png

petal width (cm)

da_handson_basic_statistic_values_25_7.png

versicolor
(50, 5)
sepal length (cm)

da_handson_basic_statistic_values_25_9.png

sepal width (cm)

da_handson_basic_statistic_values_25_11.png

petal length (cm)

da_handson_basic_statistic_values_25_13.png

petal width (cm)

da_handson_basic_statistic_values_25_15.png

virginica
(50, 5)
sepal length (cm)

da_handson_basic_statistic_values_25_17.png

sepal width (cm)

da_handson_basic_statistic_values_25_19.png

petal length (cm)

da_handson_basic_statistic_values_25_21.png

petal width (cm)

da_handson_basic_statistic_values_25_23.png

Étant donné que la quantité de données pour chaque type est faible (50), le nombre de casiers (séparateurs pour la tabulation) lors de la création d'un histogramme est approximativement réduit à 10.

Lorsqu'on regarde pour chaque type, on peut voir que la distribution de toutes les quantités d'entités peut être grossièrement représentée par la distribution gaussienne.

La distribution gaussienne pour chaque type et quantité d'entités est définie par la valeur moyenne et l'écart type. A partir de la distribution gaussienne ainsi obtenue, il est possible de l'utiliser comme classificateur car il est possible d'obtenir une probabilité pour un ensemble inconnu de quantités de caractéristiques (je voudrais l'expliquer quand on parle de détection d'anomalies).

référence

Recommended Posts

Statistiques de base et distribution gaussienne
Distribution gaussienne mixte et logsumexp
Fuzzing et statistiques
Distribution et test
Distribution OS et Linux
Termes de base CLI et Linux
Installation de Python et grammaire de base
EM de distribution gaussienne mixte
[Statistiques] Visualisons la relation entre la distribution normale et la distribution du chi carré.
Test d'hypothèse et distribution de probabilité
Installation de Python (Python 3.7.7) et grammaire de base
Connaissance de base de Linux et des commandes de base
Comparaison de la grammaire de base entre Java et Python
Authentification de base, authentification Digest avec Flask
Cours de base Python (14 modules et packages)
1. Statistiques apprises avec Python 1-1. Statistiques de base (Pandas)
[Introduction aux data scientists] Bases de la probabilité et des statistiques ♬ Variable de probabilité / probabilité et distribution de probabilité