Schätzung der Kerneldichte in Python

Was ist Kernel Density Optimization (KDE)?

[Wikipedia](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) Bitte beziehen Sie sich darauf. In einigen Situationen (große Anzahl von Daten, nach einer reibungslosen Verteilungsfunktion usw.) kann Ihnen ein Histogramm helfen, einen Überblick über Ihre Daten zu erhalten.

Machen Sie entsprechende Daten

Laden Sie zunächst die erforderlichen Pakete und erstellen Sie etwa 5 bimodale Datensätze mit überlagerten Normalverteilungen.

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)]

Schätzen Sie die Verteilung aus den Daten und zeichnen Sie ein Diagramm.

Es ist problematisch, wenn es einen lächerlichen Ausreißer gibt, daher werden die Daten zum Prozentpunkt von 0,1% auf 99,9% gekürzt. (Abgesehen davon wird in numpy "Perzentil (Array, x)" im Bereich von 0 bis 100 angegeben, in Pandas wird "Series.quantile (x)" in 0,1 angegeben. Es ist verwirrend.)

Wenn Sie die Daten dann an "scipy.stats.gaussian_kde ()" übergeben, wird die vom Gaußschen Kernel geschätzte Dichtefunktion zurückgegeben, sodass Sie sie schnell zeichnen können, indem Sie sie mit "numpy.linspace" kombinieren.

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

Wenn Sie die Methode "resample ()" des kde-Objekts verwenden, können Sie Daten für die Simulation einer Verteilung in der Nähe der gemessenen Daten generieren. Weitere Informationen finden Sie unter Offizielle Dokumente.

Recommended Posts

Schätzung der Kerneldichte in Python
Python: Diagramm der zweidimensionalen Datenverteilung (Schätzung der Kerneldichte)
Implementierung der HMM-Parameterschätzung in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python