So berechnen sie die mahalanobis-distanz in python
Der Mahalanobis-Abstand ist der Abstand zwischen zwei Punkten in einem multivariaten Raum. Es wird häufig verwendet, um Ausreißer in statistischen Analysen mit mehreren Variablen zu erkennen.
In diesem Tutorial wird erläutert, wie Sie den Mahalanobis-Abstand in Python berechnen.
Beispiel: Mahalanobis-Distanz in Python
Verwenden Sie die folgenden Schritte, um die Mahalanobis-Distanz für jede Beobachtung in einem Datensatz in Python zu berechnen.
Schritt 1: Erstellen Sie den Datensatz.
Zunächst erstellen wir einen Datensatz, der die Prüfungsergebnisse von 20 Studenten zusammen mit der Anzahl der Lernstunden, der Anzahl der von ihnen abgelegten Übungsprüfungen und ihrer aktuellen Note im Kurs anzeigt:
import numpy as np import pandas as pd import scipy as stats data = {'score': [91, 93, 72, 87, 86, 73, 68, 87, 78, 99, 95, 76, 84, 96, 76, 80, 83, 84, 73, 74], 'hours': [16, 6, 3, 1, 2, 3, 2, 5, 2, 5, 2, 3, 4, 3, 3, 3, 4, 3, 4, 4], 'prep': [3, 4, 0, 3, 4, 0, 1, 2, 1, 2, 3, 3, 3, 2, 2, 2, 3, 3, 2, 2], 'grade': [70, 88, 80, 83, 88, 84, 78, 94, 90, 93, 89, 82, 95, 94, 81, 93, 93, 90, 89, 89] } df = pd.DataFrame(data,columns=['score', 'hours', 'prep','grade']) df.head() score hours prep grade 0 91 16 3 70 1 93 6 4 88 2 72 3 0 80 3 87 1 3 83 4 86 2 4 88
Schritt 2: Berechnen Sie die Mahalanobis-Distanz für jede Beobachtung.
Als nächstes schreiben wir eine kurze Funktion zur Berechnung der Mahalanobis-Distanz.
#create function to calculate Mahalanobis distance def mahalanobis(x= None , data= None , cov= None ): x_mu = x - np.mean(data) if not cov: cov = np.cov(data.values.T) inv_covmat = np.linalg.inv(cov) left = np.dot(x_mu, inv_covmat) mahal = np.dot(left, x_mu.T) return mahal.diagonal() #create new column in dataframe that contains Mahalanobis distance for each row df['mahalanobis'] = mahalanobis(x=df, data=df[['score', 'hours', 'prep', 'grade']]) #display first five rows of dataframe df.head() score hours prep grade mahalanobis 0 91 16 3 70 16.501963 1 93 6 4 88 2.639286 2 72 3 0 80 4.850797 3 87 1 3 83 5.201261 4 86 2 4 88 3.828734
Schritt 3: Berechnen Sie den p-Wert für jede Mahalanobis-Distanz.
Wir können sehen, dass einige Mahalanobis-Abstände viel größer sind als andere. Um festzustellen, ob eine der Abstände statistisch signifikant ist, müssen wir ihre p-Werte berechnen.
Der p-Wert für jede Distanz wird als p-Wert berechnet, der der Chi-Quadrat-Statistik der Mahalanobis-Distanz mit k-1 Freiheitsgraden entspricht, wobei k = Anzahl der Variablen. In diesem Fall verwenden wir also Freiheitsgrade von 4-1 = 3.
from scipy.stats import chi2 #calculate p-value for each mahalanobis distance df['p'] = 1 - chi2.cdf(df['mahalanobis'], 3) #display p-values for first five rows in dataframe df.head() score hours prep grade mahalanobis p 0 91 16 3 70 16.501963 0.000895 1 93 6 4 88 2.639286 0.450644 2 72 3 0 80 4.850797 0.183054 3 87 1 3 83 5.201261 0.157639 4 86 2 4 88 3.828734 0.280562
Im Allgemeinen gilt ein p-Wert von weniger als 0,001 als Ausreißer. Wir können sehen, dass die erste Beobachtung ein Ausreißer im Datensatz ist, da sie einen p-Wert von weniger als 0,001 hat.
Abhängig vom Kontext des Problems können Sie sich entscheiden, diese Beobachtung aus dem Datensatz zu entfernen, da es sich um einen Ausreißer handelt und die Analyseergebnisse beeinträchtigen könnte.