Dieser Artikel wurde im Rahmen der Data Science Blogathon
Einführung
In meinem vorherigen Artikel, Ich spreche über die theoretischen Konzepte zu Ausreißern und versuche die Antwort auf die Frage zu finden: „Wann müssen wir die Ausreißer entfernen und wann behalten wir die Ausreißer??“.
Um diesen Artikel besser zu verstehen, das musst du erst lesen Artikel und fahren Sie dann damit fort, damit Sie eine klare Vorstellung von der Ausreißeranalyse in Data Science-Projekten haben.
In diesem Artikel, Wir werden versuchen, die folgenden Fragen gemeinsam mit den Felshaken Implementierung,
👉 Umgang mit Ausreißern?
👉 So erkennen Sie Ausreißer?
👉 Welche Techniken zum Erkennen und Entfernen von Ausreißern gibt es??
Lasst uns beginnen
Umgang mit Ausreißern?
👉 Garnison: Ausreißer ausschließen. unserer Analyse. Anwenden dieser Technik unsere Daten werden dünn, wenn mehr Ausreißer im Datensatz vorhanden sind. Sein Hauptvorteil ist seine das schnellste Natur.
👉Tamponade: Bei dieser Technik, Cap unsere Ausreißer und machen die Grenze nämlich, über oder unter einem bestimmten Wert, alle Werte werden als Ausreißer betrachtet, und die Anzahl der Ausreißer im Datensatz ergibt diese Begrenzungszahl.
Zum Beispiel, Wenn Sie in der Einkommensfunktion arbeiten, Menschen über einem bestimmten Einkommensniveau können sich genauso verhalten wie Menschen mit niedrigerem Einkommen. In diesem Fall, kann den Wert des Einkommens auf ein Niveau begrenzen, das es intakt hält und, Folglich, mit Ausreißern umgehen.
👉Ausreißer als fehlenden Wert behandeln: Von Annahme von Ausreißern als fehlende Beobachtungen, behandle sie entsprechend, nämlich, gleich fehlenden Werten.
Sie können das fehlende Wertelement überprüfen hier
👉 Diskretisierung: Bei dieser Technik, Beim Erstellen der Gruppen beziehen wir die Ausreißer in eine bestimmte Gruppe ein und zwingen sie, sich genauso zu verhalten wie die anderen Punkte in dieser Gruppe. Diese Technik ist auch bekannt als Klasseneinteilung.
Sie können mehr über die Diskretisierung erfahren hier.
So erkennen Sie Ausreißer?
👉 Für Normalverteilungen: Verwenden Sie empirische Normalverteilungsbeziehungen.
– Die Datenpunkte unten Medien-3 * (sigma) oder höher Medien + 3 * (sigma) sind Ausreißer.
wo bedeuten und sigma sind die Durchschnittswert Ja Standardabweichung einer bestimmten Spalte.
Feige. Eigenschaften einer Normalverteilung
Bildquelle: Verknüpfung
👉 Für schiefe Verteilungen: Verwenden Sie die Näherungsregel für den Interquartilbereich (IQR).
– Die Datenpunkte unten Q1 – 1.5 IQR oder höher Q3 + 1.5 IQR sind Ausreißer.
wobei Q1 und Q3 die sind 25 Ja Perzentil 75 des Datensatzes bzw., und IQR stellt den Interquartilsabstand dar und ist gegeben durch Q3 – Q1.
Feige. IQR zur Erkennung von Ausreißern
Bildquelle: Verknüpfung
👉 Für andere Distributionen: Benutzen Perzentilbasierter Ansatz.
Zum Beispiel, Datenpunkte, die weit vom Perzentil entfernt sind 99% und weniger als das Perzentil 1 gelten als Ausreißer.
Feige. Perzentildarstellung
Bildquelle: Verknüpfung
Techniken zur Erkennung und Beseitigung von Ausreißern:
👉 Z-Score-Behandlung:
Annahme– Kennlinien sind normal oder annähernd normalverteilt.
Paso 1: Import erforderlicher Abhängigkeiten
numpy als np importieren Pandas als pd importieren import matplotlib.pyplot als plt import seaborn als sns
Paso 2: den Datensatz lesen und laden
df = pd.read_csv('platzierung.csv') df.probe(5)
Paso 3: Skizzieren Sie die Verteilungsgraphen für die Charakteristiken
Importwarnungen Warnungen.Filterwarnungen('ignorieren') plt.figur(Feigengröße=(16,5)) plt.subplot(1,2,1) sns.distplot(df['cgpa']) plt.subplot(1,2,2) sns.distplot(df['placement_exam_marks']) plt.zeigen()
Paso 4: finde die grenzwerte
drucken("Höchst erlaubt",df['cgpa'].bedeuten() + 3*df['cgpa'].std()) drucken("Niedrigste zulässige",df['cgpa'].bedeuten() - 3*df['cgpa'].std())
Produktion:
Höchst erlaubt 8.808933625397177 Niedrigste zulässige 5.113546374602842
Paso 5: Ausreißer finden
df[(df['cgpa'] > 8.80) | (df['cgpa'] < 5.11)]
Paso 6: Ausreißer trimmen
new_df = df[(df['cgpa'] < 8.80) & (df['cgpa'] > 5.11)] new_df
Paso 7: Ausreißerbegrenzung
obere_grenze = df['cgpa'].bedeuten() + 3*df['cgpa'].std() Untergrenze = df['cgpa'].bedeuten() - 3*df['cgpa'].std()
Paso 8: jetzt, Kappe anwenden
df['cgpa'] = np.wo( df['cgpa']>obere Grenze, obere Grenze, np.wo( df['cgpa']<untere Grenze, untere Grenze, df['cgpa'] ) )
Paso 9: Sehen Sie sich jetzt die Statistiken mit der Funktion an „Beschreiben“
df['cgpa'].beschreiben()
Produktion:
zählen 1000.000000 bedeuten 6.961499 std 0.612688 Mindest 5.113546 25% 6.550000 50% 6.960000 75% 7.370000 max 8.808934 Name: cgpa, dtyp: float64
Dies vervollständigt unsere Z-Score-basierte Technik!!
👉 Filterung nach IQR:
Wird verwendet, wenn unsere Datenverteilung verzerrt ist.
Paso 1: Importieren Sie die notwendigen Abhängigkeiten
numpy als np importieren Pandas als pd importieren import matplotlib.pyplot als plt import seaborn als sns
Paso 2: den Datensatz lesen und laden
df = pd.read_csv('platzierung.csv') df.kopf()
Paso 3: Skizzieren Sie das Verteilungsdiagramm der Merkmale.
plt.figur(Feigengröße=(16,5)) plt.subplot(1,2,1) sns.distplot(df['cgpa']) plt.subplot(1,2,2) sns.distplot(df['placement_exam_marks']) plt.zeigen()
Paso 4: Bilden Sie einen Boxplot für die schiefe Charakteristik
sns.boxplot(df['placement_exam_marks'])
Paso 5: Finden Sie den IQR
Perzentil25 = df['placement_exam_marks'].Quantil(0.25) Perzentil75 = df['placement_exam_marks'].Quantil(0.75)
Paso 6: Finden Sie die obere und untere Grenze
Obergrenze = Perzentil75 + 1.5 * iqr Untergrenze = Perzentil25 - 1.5 * iqr
Paso 7: Ausreißer finden
df[df['placement_exam_marks'] > obere Grenze] df[df['placement_exam_marks'] < untere Grenze]
Paso 8: Ausgeschnitten
new_df = df[df['placement_exam_marks'] < obere Grenze] new_df.shape
Paso 9: Vergleichen Sie die Plots nach dem Trimmen
plt.figur(Feigengröße=(16,8)) plt.subplot(2,2,1) sns.distplot(df['placement_exam_marks']) plt.subplot(2,2,2) sns.boxplot(df['placement_exam_marks']) plt.subplot(2,2,3) sns.distplot(new_df['placement_exam_marks']) plt.subplot(2,2,4) sns.boxplot(new_df['placement_exam_marks']) plt.zeigen()
Paso 10: gesteckt
new_df_cap = df.copy() new_df_cap['placement_exam_marks'] = np.wo( new_df_cap['placement_exam_marks'] > obere Grenze, obere Grenze, np.wo( new_df_cap['placement_exam_marks'] < untere Grenze, untere Grenze, new_df_cap['placement_exam_marks'] ) )
Paso 11: Vergleichen Sie die Plots nach der Einschränkung
plt.figur(Feigengröße=(16,8)) plt.subplot(2,2,1) sns.distplot(df['placement_exam_marks']) plt.subplot(2,2,2) sns.boxplot(df['placement_exam_marks']) plt.subplot(2,2,3) sns.distplot(new_df_cap['placement_exam_marks']) plt.subplot(2,2,4) sns.boxplot(new_df_cap['placement_exam_marks']) plt.zeigen()
Dies vervollständigt unsere IQR-basierte Technik!!
👉 Perzentil:
– Diese Technik funktioniert, indem ein bestimmter Schwellenwert festgelegt wird, die aufgrund unserer Herangehensweise an das Problem entscheidet.
– Während wir Ausreißer entfernen, indem wir begrenzen, diese spezielle Methode ist bekannt als Winsorización.
– Hier halten wir immer Symmetrie auf beiden Seiten bedeutet, dass, wenn wir die 1% rechts, dann nehmen wir links auch a . ab 1%.
Paso 1: Importieren Sie die notwendigen Abhängigkeiten
numpy als np importieren Pandas als pd importieren
Paso 2: den Datensatz lesen und laden
df = pd.read_csv('gewicht-höhe.csv') df.probe(5)
Paso 3: Skizzieren Sie den Verteilungsgraphen der Charakteristik von „Höhe“
sns.distplot(df['Höhe'])
Paso 4: Zeichnen Sie den Boxplot der Charakteristik von „Höhe“
sns.boxplot(df['Höhe'])
Paso 5: Finden Sie die obere und untere Grenze
obere_grenze = df['Höhe'].Quantil(0.99) Untergrenze = df['Höhe'].Quantil(0.01)
Paso 7: Trimmen anwenden
new_df = df[(df['Höhe'] <= 74.78) & (df['Höhe'] >= 58.13)]
Paso 8: Vergleichen Sie die Verteilung und den Boxplot nach dem Ausschneiden
sns.distplot(new_df['Höhe']) sns.boxplot(new_df['Höhe'])
👉 Winsorización:
Paso 9: Beschränkung anwenden (Winsorización)
df['Höhe'] = np.wo(df['Höhe'] >= obere_grenze, obere Grenze, np.wo(df['Höhe'] <= untere_Grenze, untere Grenze, df['Höhe']))
Paso 10: Vergleichen Sie Verteilung und Boxplot nach Einschränkung
sns.distplot(df['Höhe']) sns.boxplot(df['Höhe'])
Dies vervollständigt unsere perzentilbasierte Technik!!
Abschließende Anmerkungen
Danke fürs Lesen!
Wenn dir das gefallen hat und du mehr wissen möchtest, Besuchen Sie meine anderen Artikel zu Data Science und Machine Learning, indem Sie auf das klicken Verknüpfung
Kontaktieren Sie mich gerne unter Linkedin, Email.
Alles was nicht erwähnt wurde oder du deine Gedanken teilen möchtest? Fühlen Sie sich frei, unten einen Kommentar zu hinterlassen und ich melde mich bei Ihnen.
Über den Autor
Chirag Goyal
Heutzutage, Ich studiere meinen Bachelor of Technology (B.Tech) in Informatik und Ingenieurwissenschaften von Indisches Technologieinstitut Jodhpur (IITJ). Ich freue mich sehr über maschinelles Lernen, das tiefes LernenTiefes Lernen, Eine Teildisziplin der Künstlichen Intelligenz, verlässt sich auf künstliche neuronale Netze, um große Datenmengen zu analysieren und zu verarbeiten. Diese Technik ermöglicht es Maschinen, Muster zu lernen und komplexe Aufgaben auszuführen, wie Spracherkennung und Computer Vision. Seine Fähigkeit, sich kontinuierlich zu verbessern, wenn mehr Daten zur Verfügung gestellt werden, macht es zu einem wichtigen Werkzeug in verschiedenen Branchen, von Gesundheit... und Künstliche Intelligenz.
Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.