Estimation de la densité du noyau en Python

Qu'est-ce que l'optimisation de la densité du noyau (KDE)?

[Wikipédia](http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E5%AF%86%E5%BA % A6% E6% 8E% A8% E5% AE% 9A) Veuillez vous y référer. Dans certaines situations (grand nombre de données, suite à une fonction de distribution fluide, etc.), un histogramme peut vous aider à avoir une vue d'ensemble de vos données.

Faire des données appropriées

Tout d'abord, chargez les packages requis et créez environ 5 ensembles de données bimodaux avec des distributions normales superposées.

import numpy as np
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt

N = 5

means = np.random.randn(N,2) * 10 + np.array([100, 200])
stdev = np.random.randn(N,2) * 10 + 30
count = np.int64(np.int64(np.random.randn(N,2) * 10000 + 50000))

a = [
    np.hstack([
        np.random.randn(count[i,j]) * stdev[i,j] + means[i,j]
        for j in range(2)])
    for i in range(N)]

Estimez la distribution à partir des données et dessinez un graphique.

Il est gênant s'il existe une valeur aberrante ridicule, de sorte que les données seront coupées au point de pourcentage de 0,1% à 99,9%. (En passant, dans numpy, percentile (array, x) est spécifié dans la plage de 0..100, mais dans les pandas, Series.quantile (x) est spécifié en 0.1. C'est déroutant.)

Si vous passez ensuite les données à scipy.stats.gaussian_kde (), il retournera la fonction de densité estimée par le noyau gaussien, vous pouvez donc la tracer rapidement en la combinant avec numpy.linspace.

limmin = min(np.percentile(x, 0.1) for x in a)
limmax = max(np.percentile(x, 99.9) for x in a)
ls = np.linspace(limmin, limmax, 100)

for n in range(N):
    x = a[n]
    x = x[(x > limmin)&(x < limmax)]
    kde = gaussian_kde(x)
    plt.plot(ls, kde(ls), label='data %d' % n)

plt.xlim([limmin, limmax])
plt.legend()
plt.title('data distributions')
plt.show()

kde.png

Si vous utilisez la méthode resample () de l'objet kde, vous pouvez générer des données pour la simulation d'une distribution proche des données mesurées. Pour plus d'informations, voir Documents officiels.

Recommended Posts

Estimation de la densité du noyau en Python
Python: Diagramme de distribution de données bidimensionnelle (estimation de la densité du noyau)
Implémentation de l'estimation des paramètres HMM en python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python