Heim  >  Artikel  >  Backend-Entwicklung  >  So führen Sie einen Grubbs-Test in Python durch

So führen Sie einen Grubbs-Test in Python durch

WBOY
WBOYnach vorne
2023-08-28 15:49:07873Durchsuche

Einführung

Der Grubbs-Test ist eine statistische Hypothesentestmethode, mit der Ausreißer in einem Datensatz erkannt werden. Ausreißer sind Beobachtungen, die einer Datenverteilung zugeordnet sind, auch Anomalien genannt. Datensätze mit Ausreißern sind tendenziell anfälliger für eine Überanpassung als Daten mit einer Normal-/Gaußverteilung. Daher ist es notwendig, Ausreißer vor der Modellierung durch maschinelles Lernen zu berücksichtigen. Vor der Verarbeitung müssen wir Ausreißer im Datensatz erkennen und lokalisieren. Die beliebtesten Techniken zur Erkennung von Ausreißern sind QQPlot, der Interquartilbereich und der statistische Grubbs-Test. In diesem Artikel wird jedoch nur der Grubbs-Test zur Erkennung von Ausreißern besprochen. Sie erfahren: Was ist ein Grubbs-Test und wie implementiert man ihn in Python?

Was ist ein Ausreißer?

Ausreißer sind Datenbeobachtungen, die numerisch von anderen Datenwerten entfernt sind. Diese Werte liegen außerhalb des Bereichs normalverteilter Daten. Der Datensatz muss 67 % der Datensätze bei der ersten Standardabweichung, 95 % der Daten bei der zweiten Standardabweichung und 99,7 % der Punkte bei der dritten Standardabweichung enthalten, um eine Normalverteilung zu erreichen. Mit anderen Worten: Die Datenpunkte sollten zwischen dem ersten und dritten Quartilbereich liegen. Wir betrachten Datensätze unterhalb des ersten Quartils und oberhalb des dritten Quartils als Ausreißer bzw. Ausreißer.

Grabbs Statistischer Hypothesentest

Wie jeder andere statistische Hypothesentest kann auch der Grubbs-Test die Nullhypothese (H0) oder die Alternativhypothese (H1) bestätigen oder ablehnen. Der Grubbs-Test ist ein Test, der Ausreißer in einem Datensatz erkennt.

Wir können den Grubbs-Test auf zwei Arten durchführen: Einseitiger Test und Zweiseitiger Test, für univariate Datensätze oder nahezu normale Stichproben mit Verteilungen von mindestens sieben Variablen. Dieser Test wird auch als extremer studentisierter Abweichungstest oder maximal normalisierter Resttest bezeichnet.

Der Grubbs-Test verwendet die folgenden Annahmen -

  • Null (H0): Der Datensatz weist keine Ausreißer auf.

  • Alternative (H1): Der Datensatz hat nur einen Ausreißer.

Grabbs-Test in Python

Python kann mit seiner umfangreichen Bibliothekssammlung jede Programmierherausforderung meistern. Diese Bibliotheken stellen integrierte Methoden bereit, die direkt zum Ausführen beliebiger Vorgänge, statistischer Tests usw. verwendet werden können. Ebenso verfügt Python über eine Bibliothek, die Methoden zur Durchführung von Grubbs-Tests zur Erkennung von Ausreißern enthält. Wir werden jedoch zwei Möglichkeiten untersuchen, Grubbs-Tests in Python zu implementieren: integrierte Funktionen in Bibliotheken und die Implementierung von Formeln von Grund auf.

Outlier-Bibliothek und Smirnov_grubbs

Lassen Sie uns zunächst die outlier_utils-Bibliothek mit dem folgenden Befehl installieren.

!pip install outlier_utils

Jetzt erstellen wir einen Datensatz mit Ausreißern und führen einen Grubbs-Test durch.

Doppelseitige Grubb-Inspektion

Grammatik

grubbs.test(data, alpha=.05)

Parameter

Daten – Numerischer Vektor von Datenwerten.

alpha – Das Signifikanzniveau des Tests.

Anleitung

Bei dieser Methode muss der Benutzer die Funktion smirnov_grubbs.test() aus dem Outliers-Paket verwenden und die erforderlichen Daten als Eingabe übergeben, um Grubbs Tests auszuführen.

Beispiel

import numpy as np
from outliers import smirnov_grubbs as grubbs
 
#define data
data = np.array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40])
 
#perform Grubbs' test
grubbs.test(data, alpha=.05)

Ausgabe

array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22,  8, 21, 28, 11,  9, 29])

Der obige Code beginnt einfach mit dem Laden der Bibliothek und der Daten und verwendet schließlich die Methode „test“, um einen Grubbs-Test für diese Daten durchzuführen. Dieser Test erkennt Ausreißer auf beiden Seiten (links und rechts) oder Werte unterhalb des ersten Quartils und oberhalb des dritten Quartils. Die Daten enthielten nur einen Ausreißer (40), der mithilfe des Grubbs-Tests entfernt wurde.

Einseitiger Grubbs-Test

Synatx

grubbs.max_test(data, alpha=.05)

Anleitung

Bei dieser Methode muss der Benutzer die Funktion grubbs.min_test() aufrufen, um den minimalen Ausreißerwert aus dem bereitgestellten Datensatz zu erhalten, oder die Funktion grubbs.max_test() aufrufen, um den maximalen Ausreißerwert aus dem bereitgestellten Datensatz zu erhalten Es wurde ein einseitiger Grubb-Test erhalten.

Beispiel

import numpy as np
from outliers import smirnov_grubbs as grubbs
 
#define data
data = np.array([5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40])

#perform Grubbs' test for minimum value is an outlier
print(grubbs.min_test(data, alpha=.05)) 

#perform Grubbs' test for minimum value is an outlier
grubbs.max_test(data, alpha=.05)

Ausgabe

[ 5 14 15 15 14 19 17 16 20 22  8 21 28 11  9 29 40]
array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22,  8, 21, 28, 11,  9, 29])

Der einseitige Grubbs-Test erkennt Ausreißer unterhalb des ersten Quartils oder oberhalb des dritten Quartils. Wir können sehen, dass die Methode min_test Ausreißer von der kleinsten Seite der Daten entfernt, während die Methode max_test Ausreißer von der Oberseite der Daten entfernt.

Formelimplementierung

Hier werden wir Python verwenden, um die folgende Grubbs-Testformel zu implementieren. Um dies zu erreichen, werden wir die Bibliotheken Numpy und Scipy verwenden.

So führen Sie einen Grubbs-Test in Python durch

Grammatik

g_calculated = numerator/sd_x
g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))

Algorithmus

Die Implementierungsschritte sind wie folgt -

  • Berechnen Sie den Durchschnitt der Datensatzwerte.

  • Berechnen Sie die Standardabweichung der Datensatzwerte.

  • Um die Grubbs-Testformel zu implementieren, berechnen Sie den Zähler, indem Sie den Wert jedes Werts im Datensatz von seinem Mittelwert subtrahieren.

  • Dividieren Sie den Zählerwert durch die Standardabweichung, um die berechnete Punktzahl zu erhalten.

  • Berechnen Sie kritische Werte für denselben Wert.

  • Wenn der kritische Wert größer als der berechnete Wert ist, gibt es keinen Ausreißer im Datensatz, andernfalls liegt ein Ausreißer vor.

Beispiel

import numpy as np
import scipy.stats as stats
## define data
x = np.array([12,13,14,19,21,23])
y = np.array([12,13,14,19,21,23,45])

## implement Grubbs test
def grubbs_test(x):
   n = len(x)
   mean_x = np.mean(x)
   sd_x = np.std(x)
   numerator = max(abs(x-mean_x))
   g_calculated = numerator/sd_x
   print("Grubbs Calculated Value:",g_calculated)
   t_value_1 = stats.t.ppf(1 - 0.05 / (2 * n), n - 2)
   g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))
   print("Grubbs Critical Value:",g_critical)
   if g_critical > g_calculated:
      print("We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers\n")
   else:
      print("We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers\n")
grubbs_test(x)
grubbs_test(y)

Ausgabe

Grubbs Calculated Value: 1.4274928542926593
Grubbs Critical Value: 1.887145117792422
We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers

Grubbs Calculated Value: 2.2765147221587774
Grubbs Critical Value: 2.019968507680656
We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers

Das Ergebnis des Grubb-Tests zeigt, dass das Array x keine Ausreißer hat, y jedoch 1 Ausreißer.

Fazit

In diesem Artikel haben wir etwas über Ausreißer und Grubbs-Tests in Python gelernt. Lassen Sie uns diesen Artikel mit einigen wichtigen Punkten abschließen.

  • Ausreißer sind Datensätze, die außerhalb des Interquartilbereichs liegen.

  • Ausreißer entsprechen nicht der Normalverteilung des Datensatzes.

  • Wir können den statistischen Test der Grubbs-Hypothese verwenden, um Ausreißer zu erkennen.

  • Wir können Grubbs-Tests mit den integrierten Methoden ausführen, die in der outlier_utils-Bibliothek bereitgestellt werden.

  • Der zweiseitige Grubbs-Test erkennt und entfernt Ausreißer auf der linken und rechten Seite.

  • Der einseitige Grubbs-Test erkennt jedoch Ausreißer auf beiden Seiten.

Das obige ist der detaillierte Inhalt vonSo führen Sie einen Grubbs-Test in Python durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen