2015-06-14 13 views
11

ich diesen Code verwenden, um eine Gaußsche Kernel Dichte auf, dies zu berechnen Werteberechnen, wie ein Wert aus dem Durchschnitt der Werte unterscheidet sich mit dem Gaußschen Kernel Density (Python)

from random import randint 
x_grid=[] 
for i in range(1000): 
    x_grid.append(randint(0,4)) 
print (x_grid) 

Dies ist der Code der Gaußsche Kernel zu berechnen Dichte

from statsmodels.nonparametric.kde import KDEUnivariate 
import matplotlib.pyplot as plt 

def kde_statsmodels_u(x, x_grid, bandwidth=0.2, **kwargs): 
    """Univariate Kernel Density Estimation with Statsmodels""" 
    kde = KDEUnivariate(x) 
    kde.fit(bw=bandwidth, **kwargs) 
    return kde.evaluate(x_grid) 

import numpy as np 
from scipy.stats.distributions import norm 

# The grid we'll use for plotting 
from random import randint 
x_grid=[] 
for i in range(1000): 
    x_grid.append(randint(0,4)) 
print (x_grid) 

# Draw points from a bimodal distribution in 1D 
np.random.seed(0) 
x = np.concatenate([norm(-1, 1.).rvs(400), 
        norm(1, 0.3).rvs(100)]) 

pdf_true = (0.8 * norm(-1, 1).pdf(x_grid) + 
      0.2 * norm(1, 0.3).pdf(x_grid)) 

# Plot the three kernel density estimates 
fig, ax = plt.subplots(1, 2, sharey=True, figsize=(13, 8)) 
fig.subplots_adjust(wspace=0) 

pdf=kde_statsmodels_u(x, x_grid, bandwidth=0.2) 
ax[0].plot(x_grid, pdf, color='blue', alpha=0.5, lw=3) 
ax[0].fill(x_grid, pdf_true, ec='gray', fc='gray', alpha=0.4) 
ax[0].set_title("kde_statsmodels_u") 
ax[0].set_xlim(-4.5, 3.5) 

plt.show() 

Alle Werte im Raster liegen zwischen 0 e 4. Wenn ich einen neuen Wert von 5 empfange ich berechnen wollen, wie dieser Wert von den Mittelwerten unterscheidet, und weisen sie ihm eine Punktzahl zwischen 0 und 1 . (Einstellen eines Schwellenwerts)

Wenn ich also einen neuen Wert 5 erhalte, muss der Wert nahe bei 0,90, liegen. Wenn ich einen neuen Wert 500 erhalte, muss der Wert nahe bei 0,0 liegen.

Wie kann ich das tun? Ist meine Funktion, die Gaussian Kernel Density korrekt zu berechnen oder gibt es einen besseren Weg/Bibliothek, um das zu tun?

* UPDATE * Ich habe ein Beispiel in einem Papier gelesen. Das Gewicht einer Waschmaschine beträgt typischerweise 100 kg. Üblicherweise verwenden Verkäufer die kg-Einheit, um auch ihre Kapazität zu bezeichnen (Beispiel 9 kg). Für einen Menschen ist leicht zu verstehen, dass 9 gk die Kapazität und nicht das Gesamtgewicht der Waschmaschine ist. Wir können diese Form der Intelligenz ohne tiefes Sprachverständnis "fälschen", indem wir stattdessen für jedes Attribut eine Verteilung von Werten über Trainingsdaten modellieren.

Für ein gegebenes Attribut a (Gewicht einer Waschmaschine zum Beispiel), sei Va = {va1, va2,. . . van} (| Va | = n) ist die Menge der Werte des Attributs a, die den Produkten in den Trainingsdaten entspricht. Wenn ich einen neuen Wert gefunden habe v Intuitiv ist es "nah" an (die Verteilung geschätzt von) Va, dann sollten wir uns sicherer fühlen, diesen Wert einem (Beispielgewicht einer Waschmaschine) zuzuweisen. Eine Idee könnte sein, die Anzahl der Standardabweichungen durch zu messen, wobei der neue Wert v von dem Durchschnitt der Werte in Va abweicht, aber ein besserer wäre, eine (Gaußsche) Kerndichte auf Va zu modellieren und dann auszudrücken der Träger bei neuem Wert V als die Dichte an diesem Punkt:

enter image description here

wo wo σ^(2) ak die Varianz des k-ten Gaussian ist, und Z ist eine konstante sicher S zu machen (CSV , Va) ∈ [0, 1]. Wie kann ich es in Python mit der Bibliothek statsmodels erhalten?

* AKTUALISIERT 2 * Beispiel von Daten ... aber ich denke, dass ist nicht sehr wichtig ... durch diesen Code generiert ...

from random import randint 
x_grid=[] 
for i in range(1000): 
    x_grid.append(randint(1,3)) 
print (x_grid) 

[2, 2, 1, 2, 2, 3, 1, 1, 1, 2, 2, 2, 1, 1, 3, 3, 1, 2, 1, 3, 2, 3, 3, 1, 2, 3, 1, 1, 3, 2, 1, 1, 1, 2, 3, 2, 1, 2, 3, 2, 2, 3, 3, 2, 2, 1, 2, 1, 2, 2, 3, 3, 1, 1, 2, 3, 3, 2, 1, 2, 3, 3, 3, 2, 1, 3, 2, 2, 1, 3, 3, 1, 2, 1, 3, 2, 3, 3, 1, 2, 3, 2, 1, 2, 3, 2, 1, 1, 2, 1, 1, 2, 3, 2, 1, 2, 2, 2, 3, 2, 3, 3, 1, 1, 3, 2, 1, 1, 3, 3, 2, 1, 2, 2, 1, 3, 2, 3, 1, 3, 1, 2, 3, 1, 3, 2, 2, 1, 1, 2, 2, 3, 1, 1, 3, 2, 2, 1, 2, 1, 2, 3, 1, 3, 3, 1, 2, 1, 2, 1, 3, 1, 3, 3, 2, 1, 1, 3, 2, 2, 2, 3, 2, 1, 3, 2, 1, 1, 3, 3, 3, 2, 1, 1, 3, 2, 1, 2, 2, 1, 3, 1, 3, 2, 3, 1, 2, 1, 1, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 1, 1, 2, 1, 1, 1, 3, 3, 3, 1, 3, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 3, 1, 2, 3, 1, 3, 2, 2, 2, 2, 1, 1, 2, 3, 1, 1, 1, 3, 1, 3, 2, 2, 3, 1, 3, 3, 2, 2, 3 , 2, 1, 2, 1, 1, 1, 2, 2, 3, 2, 1, 1, 3, 1, 2, 1, 3, 3, 3, 1, 2, 2, 2, 1, 1 , 2, 2, 1, 2, 3, 1, 3, 2, 2, 2, 2, 2, 1, 3, 1, 3, 3, 2, 3, 2, 1, 3, 3, 3 , 3, 3, 1, 2, 2, 2, 1, 1, 3, 2, 3, 1, 2, 3, 2, 3, 2, 1, 1, 3, 3, 1, 1, 2, 3 , 2, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 2, 3, 1, 1, 1, 1 , 2, 2, 2, 2, 1, 1, 2, 2, 1, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 2, 3, 1, 2, 1, 3 , 3, 2, 2, 3, 3, 3, 2, 1, 1, 2, 2, 3, 2, 3, 2, 1, 1, 1, 2, 3, 1, 3, 3, 3 , 2, 1, 2, 3, 1, 2, 1, 1, 2, 3, 3, 1, 1, 3, 2, 1, 3, 3, 2, 1, 1, 3, 1, 3, 1 , 2, 2, 1, 3, 3, 2, 3, 1, 1, 3, 1, 2, 2, 1, 3, 2, 3, 1, 1, 3, 1, 3, 1, 2, 1 , 3, 2, 2, 2, 2, 1, 3, 2, 1, 3, 3, 2, 3, 2, 1, 3, 1, 2, 1, 2, 3, 2, 3, 2, 3 , 3, 2, 3, 3, 1, 1, 3, 2, 3, 2, 2, 3, 1, 3, 2, 2, 3, 3, 2, 3, 2, 2, 2, 3 , 3, 1, 3, 2, 3, 1, 1, 2, 1, 3, 1, 2, 2, 3, 3, 1, 3, 1, 1, 2, 2, 1, 3, 3, 3 , 1, 2, 2, 2, 1, 3, 1, 2, 2, 2, 3, 3, 1, 1, 2, 3, 3, 1, 1, 2, 3, 2, 3, 3 , 2, 2, 1, 3, 3, 3, 2, 3, 1, 3, 3, 2, 1, 3, 2, 1, 1, 3, 2, 2, 2, 2, 1 , 1, 1, 1, 2, 3, 3, 3, 2, 1, 3, 1, 1, 1, 1, 3, 1, 2, 3, 3, 3, 2, 3, 1, 2, 2, 2, 3, 2, 1, 2, 3, 3, 2, 3, 3, 1, 2, 3, 3, 3, 2, 3, 3, 2, 1, 1, 1, 2, 3, 1, 3, 2, 1, 3, 3, 3, 2, 2, 1, 2, 3, 2, 3, 3, 3, 2, 3, 2, 1, 2, 1, 1, 3, 3, 2, 2, 3, 1, 3, 2, 1, 3, 1, 1, 3, 3, 1, 2, 2, 2, 3, 3, 1, 2, 1, 2, 1, 3, 2, 3, 3, 3, 3, 3, 3, 3, 1, 2, 3, 1, 3, 3, 2, 2, 1, 3, 1, 1, 3, 2, 1, 2, 3, 2, 1, 3, 3, 3, 2, 3, 1, 2, 3, 3, 1, 2, 2, 2, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 3, 3, 2, 3, 1, 3, 2, 3, 3, 1, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 2, 3, 2, 2, 3, 2, 2, 2, 3, 1, 1, 3, 3, 1, 3, 1, 2, 1, 2, 1, 3, 2, 2, 1, 3, 1, 3, 3, 1, 3, 1, 1, 1, 1, 3, 2, 1, 2, 3, 1, 1, 3, 1, 1, 3, 1, 3, 3, 1, 1, 3, 1, 3, 2, 2, 2, 1, 1, 2, 3, 3, 2, 3, 3, 1, 2, 3, 2, 2, 3, 1, 2, 2, 2, 1, 1, 3, 1, 2, 2, 2, 1, 1, 2, 3, 1, 3, 1, 1, 3, 2, 2, 3, 2, 2, 3, 3, 1, 1, 2, 2, 3, 1, 1, 2, 3, 2, 2, 3, 1, 2, 2, 1, 1, 3, 2, 3, 1, 1, 3, 1, 3, 2, 3, 3, 3, 3, 2, 2, 3, 2, 1, 1, 1, 3, 3, 1, 2, 1, 3, 2, 3, 2, 2, 1, 2, 3, 3, 1, 1, 1, 3, 3, 1, 3, 3, 1, 1, 3, 1, 3, 1, 3, 2, 3, 1, 3, 3, 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 1, 2, 1, 2, 1, 2, 3, 1, 1, 3, 2, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2, 3, 2, 3, 1, 2, 2, 1, 1, 2, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 2, 2, 1, 1, 2, 1, 3, 1, 1, 2, 3, 2, 3, 1, 3]

Dieses Array stellt den Ramm der neuen Smartphones auf dem Markt dar ... Normalerweise haben sie 1,2,3 GB RAM.

, dass der Kernel Dichte

enter image description here

ist *** UPDATE

Ich versuche, den Code mit dieser

Werte

[1024, 1, 1024, 1000, 1024, 128 1536, 16, 192, 2048, 2000, 2048, 24, 250, 256, 278, 288, 290, 3072, 3, 3000, 3072, 32, 384, 4096, 4, 4096, 448, 45, 512 576, 64, 768, 8, 96]

Die Werte sind alle in mb ... denkst du, dass das gut funktioniert?Ich denke, dass ich eine Schwelle

 100%  cdfv  kdev 
1  42 0.210097 0.499734 
1024 96 0.479597 0.499983 
5000  0 0.000359 0.498885 
2048 36 0.181609 0.499700 
3048  8 0.040299 0.499424 

* UPDATE 3 *

[256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 512, 512, 512, 256, 256, 256, 512, 512, 512, 128, 128, 128, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 128, 128, 128, 512, 512, 512, 256, 256, 256, 256, 256, 256, 1024, 1024, 1024, 512, 512, 512, 128, 128, 128, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 4, 4, 4, 3, 3, 3, 24, 24, 24, 8, 8, 8, 16, 16, 16, 16, 16, 16, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 512, 512, 512, 512, 512, 512, 256, 256, 256, 256, 256, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 2048, 2048, 2048, 2048, 2048, 2048, 4096, 4096, 4096, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 768, 768, 768, 768, 768, 768, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 512, 512, 512, 256, 256, 256, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 3072, 3072, 3072, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 256, 256, 256, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 512, 512, 512, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 64, 64, 64, 1024, 1024, 1024, 1024, 1024, 1024, 256, 256, 256, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 64, 64, 64, 64, 64, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 128, 128, 576, 576, 576, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 576, 576, 576, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 2048, 2048, 2048, 768, 768, 768, 768, 768, 768, 768, 768, 768, 512, 512, 512, 192, 192, 192, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 384, 384, 384, 448, 448, 448, 576, 576, 576, 384, 384, 384, 288, 288, 288, 768, 768, 768, 384, 384, 384, 288, 288, 288, 64, 64, 64, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 64, 64, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 256, 256, 256, 768, 768, 768, 768, 768, 768, 768, 768, 768, 256, 256, 256, 192, 192, 192, 256, 256, 256, 64, 64, 64, 256, 256, 256, 192, 192, 192, 128, 128, 128, 256, 256, 256, 192, 192, 192, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 128, 128, 128, 128, 128, 128, 384, 384, 384, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 32, 32, 32, 768, 768, 768, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 3072, 3072, 3072, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 128, 128, 128, 128, 128, 1024, 1024, 1024, 1024, 1024, 1024, 128, 128, 128, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 3072, 3072, 3072, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 256, 256, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 2048, 2048, 2048, 384, 384, 384, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 128, 128, 128, 256, 256, 256, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 768, 768, 768, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 128, 128, 128, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 64, 64, 64, 64, 64, 64, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 16, 16, 16, 3072, 3072, 3072, 3072, 3072, 3072, 256, 256, 256, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 512, 512, 512, 32, 32, 32, 1024, 1024, 1024, 1024, 1024, 1024, 256, 256, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 32, 32, 32, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 512, 512, 512, 1, 1, 1, 1024, 1024, 1024, 32, 32, 32, 32, 32, 32, 45, 45, 45, 8, 8, 8, 512, 512, 512, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 64, 64, 64, 8, 8, 8, 8, 8, 8, 8, 8, 8, 64, 64, 64, 64, 64, 64, 256, 256, 256, 64, 64, 64, 64, 64, 64, 512, 512, 512, 512, 512, 512, 512, 512, 512, 32, 32, 32, 32, 32, 32, 32, 32, 32, 128, 128, 128, 128, 128, 128, 128, 128, 128, 32, 32, 32, 128, 128, 128, 64, 64, 64, 64, 64, 64, 16, 16, 16, 256, 256, 256, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 256, 256, 256, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 256, 256, 256, 256, 256, 256, 1024, 1024, 1024, 1024, 1024, 1024, 256, 256, 256, 3072, 3072, 3072, 3072, 3072, 3072, 128, 128, 128, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 128, 128, 128, 128, 128, 128, 64, 64, 64, 256, 256, 256, 256, 256, 256, 512, 512, 512, 768, 768, 768, 768, 768, 768, 16, 16, 16, 32, 32, 32, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 512, 512, 512, 2048, 2048, 2048, 1024, 1024, 1024, 3072, 3072, 3072, 3072, 3072, 3072, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 3072, 3072, 3072, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 64, 64, 64, 96, 96, 96, 512, 512, 512, 64, 64, 64, 64, 64, 64, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 3072, 3072, 3072, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 512, 512, 512, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 64, 64, 64, 64, 64, 64, 256, 256, 256, 1024, 1024, 1024, 512, 512, 512, 256, 256, 256, 512, 512, 512, 1024, 1024, 1024, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 512, 512, 512, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 3072, 3072, 3072, 3072, 3072, 3072, 2048, 2048, 2048, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 2048, 2048, 2048, 2048, 2048, 2048, 1024, 1024, 1024, 2048, 2048, 2048, 3072, 3072, 3072, 2048, 2048, 2048] 

Mit diesem Datensatz muss, wenn ich als neuer Wert versuchen, diese Zahl

# new values 
x = np.asarray([128,512,1024,2048,3072,2800]) 

etwas schief geht mit der 3072 (alle Werte sind in MB).

Dies ist das Ergebnis:

 100%  cdfv  kdev 
128  26 0.129688 0.499376 
512  55 0.275874 0.499671 
1024 91 0.454159 0.499936 
2048 12 0.062298 0.499150 
3072  0 0.001556 0.498364 
2800  1 0.004954 0.498573 

Ich kann nicht verstehen, warum dies geschieht ... der 3072-Wert viel Zeit in den Daten erscheint ... Dies ist das Histogramm meiner Daten ist. .. das ist sehr seltsam, weil es einige Werte für 3072 und auch für 4096.

enter image description here

+0

Es klingt wie das, was Sie wirklich fragen, ist das [p-value] (https://en.wikipedia.org/wiki/P-value) reflektiert die Wahrscheinlichkeit, dass der neue Wert von gezogen wird die gleiche zugrunde liegende Verteilung wie die anderen Werte. Ein p-Wert spiegelt die Wahrscheinlichkeit wider, einen Wert * mindestens so extrem * zu zeichnen, d. H. P (x> = 500) statt p (x = 500). –

+0

danke @ali_m wie bekomme ich den p-wert? –

+0

Während es möglich ist, einen p-Wert mit KDE zu erhalten, ist es wahrscheinlich nicht das beste Werkzeug für diesen Job, da es ziemlich garantiert zu einseitig konservativen (großen) p-Werten ist ([siehe hier] (http://stats.stackexchange.com/a/56321/22156)). Eine sinnvollere Option könnte darin bestehen, eine parametrische Verteilung an Ihre vorherigen Werte anzupassen und dann den p-Wert abzuleiten, indem Sie die CDF mit Ihrem neuen Wert auswerten. Wie werden Ihre realen Daten verteilt? Können Sie ein Histogramm der Verteilung zeigen oder ein Beispiel Ihrer realen Daten veröffentlichen? –

Antwort

3

Ein paar allgemeine Bemerkungen, ohne in statsmodels Detail zu gehen.

statsmodels hat auch cdf kernels, aber ich erinnere mich nicht, wie gut sie funktionieren, und ich denke nicht, dass es automatische Bandbreitenauswahl dafür hat.

Bezogen auf die Antwort von glen_b, die in dem Kommentar verknüpft ali_m:

der CDF-Schätzung konvergiert viel schneller auf die wahre Verteilung als die Schätzung der Dichte als die Probe wächst. Um den Bias - Varianz - Kompromiss auszugleichen, sollten wir eine kleinere Bandbreite für die CDF - Kernel verwenden, die im Verhältnis zur Dichteabschätzung zu gering ist. Die Schätzungen sollten genauer sein als die entsprechenden Dichteschätzungen.

Anzahl der Schwanz Beobachtungen:

Wenn Ihre größte Beobachtung in der Probe 4 ist und Sie die CDF bei 5 wissen, dann Ihre Daten keine Informationen über sie hat. Für Schwänze, bei denen Sie nur sehr wenige Beobachtungen haben, wird die Varianz eines nichtparametrischen Schätzers wie der Kernel-Verteilungsschätzer relativ groß sein (ist es 1e-5 oder 1e-20?).

Als Alternative zur Kerndichte oder Kernel-Verteilungsschätzung können wir eine Pareto-Verteilung für die Schwanzteile schätzen. Nehmen Sie zum Beispiel die größten 10 oder 20 Prozent der Beobachtungen und passen Sie eine Pareto-Verteilung an, und verwenden Sie dies, um die Schwanzdichte zu extrapolieren. Es gibt mehrere Python-Pakete für Powerlaw-Schätzung, die für diese verwendet werden könnten. Verwendung eine parametrische Normalverteilungsannahme und einen Gaußsche Kerneldichteschätzwertes mit fester Bandbreite

Update

Im Folgenden wird gezeigt, wie „outlyingness“ zu berechnen.

Dies ist nur richtig, wenn die Probe aus einer kontinuierlichen Verteilung stammt oder durch eine kontinuierliche Verteilung approximiert werden kann. Hier geben wir vor,, dass eine Probe, die nur 3 verschiedene Werte hat, aus einer normalen Verteilung stammt. Im Wesentlichen ist der berechnete Cdf-Wert wie ein Distanzmaß, nicht eine Wahrscheinlichkeit für eine diskrete Zufallsvariable.

Dies verwendet KDE von Scipy.Statistiken mit fester Bandbreite anstelle der statsmodels-Version.

Ich bin mir nicht sicher, wie die Bandbreite in scipy Gaussian_kde eingestellt ist, so ist meine feste Bandbreite Wahl scale Ist wahrscheinlich falsch. Ich weiß nicht, wie ich eine Bandbreite wählen würde, wenn es nur drei verschiedene Werte gibt, es gibt nicht genug Informationen in den Daten. Die Standardbandbreite ist für Distributionen vorgesehen, die ungefähr normal sind oder mindestens einen einzigen Spitzenwert aufweisen.

import numpy as np 
from scipy import stats 

# data 
ram = np.array([2, <truncated from data in description>, 3]) 

loc = ram.mean() 
scale = ram.std() 

# new values 
x = np.asarray([-1, 0, 2, 3, 4, 5, 100]) 

# assume normal distribution 
cdf_val = stats.norm.cdf(x, loc=loc, scale=scale) 
cdfv = np.minimum(cdf_val, 1 - cdf_val) 

# use gaussian kde but fix bandwidth 
kde = stats.gaussian_kde(ram, bw_method=scale) 
kde_val = np.asarray([kde.integrate_box_1d(-np.inf, xx) for xx in x]) 
kdev = np.minimum(kde_val, 1 - kde_val) 


#print(np.column_stack((x, cdfv, kdev))) 
# use pandas for prettier table 
import pandas as pd 
print(pd.DataFrame({'cdfv': cdfv, 'kdev': kdev}, index=x)) 

''' 
      cdfv  kdev 
-1 0.000096 0.000417 
0 0.006171 0.021262 
2 0.479955 0.482227 
3 0.119854 0.199565 
5 0.000143 0.000472 
100 0.000000 0.000000 
''' 
+0

Angesichts Ihrer Aktualisierung gilt immer noch alles, was ich gesagt habe, außer dass es für kontinuierliche Daten oder zumindest viele diskrete Werte in der Unterstützung geeignet ist, so dass das kontinuierliche cdf eine gute Annäherung an das diskrete cdf ist. Allerdings müssen Sie einige vorherige Informationen über Punkte, die nicht in der Unterstützung sind, einschließen, zum Beispiel ist 5 nahe 4, wenn wir nie eine 5 oder größer vorher gesehen haben. Ein anderes Beispiel: Sind Bruchzahlen für die Anzahl der CPUs möglich? Können wir einen Computer haben, der 2.5 CPUs hat, oder können wir ausschließen, dass es die Anzahl der CPUs ist, wenn wir 2.5 sehen? – user333700

+0

In Bezug auf die Statistik würde ich es nur als ein nichtparametrisches Klassifikationsproblem betrachten. In Anbetracht der geschätzten nichtparametrischen Dichten für jede Kategorie können wir das Cdf verwenden, um die "Nähe" einer neuen Beobachtung für die verschiedenen Kategorien zu berechnen. (Wie ein nichtparametrisches Multinomial-Logit) – user333700

+0

Für einen einfacheren Start würde ich einfach normale Verteilung annehmen, Mittelwerte und Varianzen berechnen und das normale cdf als "Outbendingness" -Maß verwenden. Wenn die Approximation durch eine kontinuierliche Verteilung sinnvoll ist, würde ich den gleichen Ansatz mit Kernel-Verteilungsfunktionen verfeinern. – user333700