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.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert