ML - Daten mit Statistiken verstehen
Einführung
Bei der Arbeit mit maschinellen Lernprojekten ignorieren wir normalerweise zwei wichtige Teile, die aufgerufen werden mathematics und data. Wir wissen, dass ML ein datengetriebener Ansatz ist und unser ML-Modell nur so gute oder so schlechte Ergebnisse liefert wie die Daten, die wir ihm zur Verfügung gestellt haben.
Im vorherigen Kapitel haben wir erläutert, wie wir CSV-Daten in unser ML-Projekt hochladen können. Es ist jedoch hilfreich, die Daten vor dem Hochladen zu verstehen. Wir können die Daten auf zwei Arten verstehen, mit Statistiken und mit Visualisierung.
In diesem Kapitel werden wir anhand der folgenden Python-Rezepte ML-Daten mit Statistiken verstehen.
Rohdaten betrachten
Das allererste Rezept ist das Betrachten Ihrer Rohdaten. Es ist wichtig, Rohdaten zu betrachten, da die Erkenntnisse, die wir nach der Betrachtung von Rohdaten erhalten, unsere Chancen auf eine bessere Vorverarbeitung sowie den Umgang mit Daten für ML-Projekte erhöhen.
Im Folgenden finden Sie ein Python-Skript, das mithilfe der head () -Funktion von Pandas DataFrame im Diabetes-Datensatz von Pima Indians implementiert wurde, um die ersten 50 Zeilen zu betrachten und ein besseres Verständnis zu erhalten.
Beispiel
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.head(50))
Ausgabe
preg plas pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1
5 5 116 74 0 0 25.6 0.201 30 0
6 3 78 50 32 88 31.0 0.248 26 1
7 10 115 0 0 0 35.3 0.134 29 0
8 2 197 70 45 543 30.5 0.158 53 1
9 8 125 96 0 0 0.0 0.232 54 1
10 4 110 92 0 0 37.6 0.191 30 0
11 10 168 74 0 0 38.0 0.537 34 1
12 10 139 80 0 0 27.1 1.441 57 0
13 1 189 60 23 846 30.1 0.398 59 1
14 5 166 72 19 175 25.8 0.587 51 1
15 7 100 0 0 0 30.0 0.484 32 1
16 0 118 84 47 230 45.8 0.551 31 1
17 7 107 74 0 0 29.6 0.254 31 1
18 1 103 30 38 83 43.3 0.183 33 0
19 1 115 70 30 96 34.6 0.529 32 1
20 3 126 88 41 235 39.3 0.704 27 0
21 8 99 84 0 0 35.4 0.388 50 0
22 7 196 90 0 0 39.8 0.451 41 1
23 9 119 80 35 0 29.0 0.263 29 1
24 11 143 94 33 146 36.6 0.254 51 1
25 10 125 70 26 115 31.1 0.205 41 1
26 7 147 76 0 0 39.4 0.257 43 1
27 1 97 66 15 140 23.2 0.487 22 0
28 13 145 82 19 110 22.2 0.245 57 0
29 5 117 92 0 0 34.1 0.337 38 0
30 5 109 75 26 0 36.0 0.546 60 0
31 3 158 76 36 245 31.6 0.851 28 1
32 3 88 58 11 54 24.8 0.267 22 0
33 6 92 92 0 0 19.9 0.188 28 0
34 10 122 78 31 0 27.6 0.512 45 0
35 4 103 60 33 192 24.0 0.966 33 0
36 11 138 76 0 0 33.2 0.420 35 0
37 9 102 76 37 0 32.9 0.665 46 1
38 2 90 68 42 0 38.2 0.503 27 1
39 4 111 72 47 207 37.1 1.390 56 1
40 3 180 64 25 70 34.0 0.271 26 0
41 7 133 84 0 0 40.2 0.696 37 0
42 7 106 92 18 0 22.7 0.235 48 0
43 9 171 110 24 240 45.4 0.721 54 1
44 7 159 64 0 0 27.4 0.294 40 0
45 0 180 66 39 0 42.0 1.893 25 1
46 1 146 56 0 0 29.7 0.564 29 0
47 2 71 70 27 0 28.0 0.586 22 0
48 7 103 66 32 0 39.1 0.344 31 1
49 7 105 0 0 0 0.0 0.305 24 0
Aus der obigen Ausgabe können wir ersehen, dass die erste Spalte die Zeilennummer angibt, die für die Referenzierung einer bestimmten Beobachtung sehr nützlich sein kann.
Überprüfen der Datenabmessungen
Es ist immer eine gute Praxis zu wissen, wie viele Daten in Bezug auf Zeilen und Spalten wir für unser ML-Projekt haben. Die Gründe dafür sind -
Angenommen, wenn wir zu viele Zeilen und Spalten haben, würde es lange dauern, den Algorithmus auszuführen und das Modell zu trainieren.
Angenommen, wir haben zu wenig Zeilen und Spalten, dann hätten wir nicht genügend Daten, um das Modell gut zu trainieren.
Es folgt ein Python-Skript, das durch Drucken der Shape-Eigenschaft auf Pandas Data Frame implementiert wird. Wir werden es in einem Iris-Datensatz implementieren, um die Gesamtzahl der darin enthaltenen Zeilen und Spalten zu erhalten.
Beispiel
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
Ausgabe
(150, 4)
An der Ausgabe können wir leicht erkennen, dass der Iris-Datensatz, den wir verwenden werden, 150 Zeilen und 4 Spalten enthält.
Abrufen des Datentyps jedes Attributs
Es ist eine weitere gute Praxis, den Datentyp jedes Attributs zu kennen. Der Grund dafür ist, dass wir je nach Anforderung manchmal einen Datentyp in einen anderen konvertieren müssen. Beispielsweise müssen wir möglicherweise Zeichenfolgen in Gleitkomma- oder Int-Werte konvertieren, um kategoriale oder ordinale Werte darzustellen. Wir können uns anhand der Rohdaten eine Vorstellung über den Datentyp des Attributs machen. Eine andere Möglichkeit besteht darin, die Eigenschaft dtypes von Pandas DataFrame zu verwenden. Mit Hilfe der Eigenschaft dtypes können wir jeden Attributdatentyp kategorisieren. Es kann mit Hilfe des folgenden Python-Skripts verstanden werden -
Beispiel
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.dtypes)
Ausgabe
sepal_length float64
sepal_width float64
petal_length float64
petal_width float64
dtype: object
Aus der obigen Ausgabe können wir leicht die Datentypen jedes Attributs erhalten.
Statistische Zusammenfassung der Daten
Wir haben das Python-Rezept besprochen, um die Form, dh die Anzahl der Zeilen und Spalten, der Daten zu erhalten, aber oft müssen wir die Zusammenfassungen aus dieser Datenform überprüfen. Dies kann mit Hilfe der Funktion description () von Pandas DataFrame erfolgen, die außerdem die folgenden 8 statistischen Eigenschaften jedes Datenattributs bereitstellt:
- Count
- Mean
- Standardabweichung
- Mindestwert
- Höchster Wert
- 25%
- Median dh 50%
- 75%
Beispiel
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())
Ausgabe
(768, 9)
preg plas pres skin test mass pedi age class
count 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00
mean 3.85 120.89 69.11 20.54 79.80 31.99 0.47 33.24 0.35
std 3.37 31.97 19.36 15.95 115.24 7.88 0.33 11.76 0.48
min 0.00 0.00 0.00 0.00 0.00 0.00 0.08 21.00 0.00
25% 1.00 99.00 62.00 0.00 0.00 27.30 0.24 24.00 0.00
50% 3.00 117.00 72.00 23.00 30.50 32.00 0.37 29.00 0.00
75% 6.00 140.25 80.00 32.00 127.25 36.60 0.63 41.00 1.00
max 17.00 199.00 122.00 99.00 846.00 67.10 2.42 81.00 1.00
Aus der obigen Ausgabe können wir die statistische Zusammenfassung der Daten des Pima Indian Diabetes-Datensatzes zusammen mit der Form der Daten beobachten.
Überprüfen der Klassenverteilung
Klassenverteilungsstatistiken sind nützlich bei Klassifizierungsproblemen, bei denen wir das Gleichgewicht der Klassenwerte kennen müssen. Es ist wichtig, die Klassenwertverteilung zu kennen, denn wenn wir eine stark unausgewogene Klassenverteilung haben, dh eine Klasse hat viel mehr Beobachtungen als die andere Klasse, muss sie möglicherweise in der Phase der Datenaufbereitung unseres ML-Projekts speziell behandelt werden. Mit Hilfe von Pandas DataFrame können wir problemlos eine Klassenverteilung in Python erhalten.
Beispiel
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)
Ausgabe
Class
0 500
1 268
dtype: int64
Aus der obigen Ausgabe ist klar ersichtlich, dass die Anzahl der Beobachtungen mit Klasse 0 fast doppelt so hoch ist wie die Anzahl der Beobachtungen mit Klasse 1.
Überprüfen der Korrelation zwischen Attributen
Die Beziehung zwischen zwei Variablen wird als Korrelation bezeichnet. In der Statistik ist der Pearson-Korrelationskoeffizient die häufigste Methode zur Berechnung der Korrelation. Es kann drei Werte haben:
Coefficient value = 1 - Es repräsentiert voll positive Korrelation zwischen Variablen.
Coefficient value = -1 - Es repräsentiert voll negative Korrelation zwischen Variablen.
Coefficient value = 0 - Es repräsentiert no Korrelation überhaupt zwischen Variablen.
Es ist immer gut für uns, die paarweisen Korrelationen der Attribute in unserem Datensatz zu überprüfen, bevor wir sie in ein ML-Projekt verwenden, da einige Algorithmen für maschinelles Lernen wie lineare Regression und logistische Regression schlecht funktionieren, wenn wir stark korrelierte Attribute haben. In Python können wir mithilfe der Funktion corr () in Pandas DataFrame auf einfache Weise eine Korrelationsmatrix von Datensatzattributen berechnen.
Beispiel
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)
Ausgabe
preg plas pres skin test mass pedi age class
preg 1.00 0.13 0.14 -0.08 -0.07 0.02 -0.03 0.54 0.22
plas 0.13 1.00 0.15 0.06 0.33 0.22 0.14 0.26 0.47
pres 0.14 0.15 1.00 0.21 0.09 0.28 0.04 0.24 0.07
skin -0.08 0.06 0.21 1.00 0.44 0.39 0.18 -0.11 0.07
test -0.07 0.33 0.09 0.44 1.00 0.20 0.19 -0.04 0.13
mass 0.02 0.22 0.28 0.39 0.20 1.00 0.14 0.04 0.29
pedi -0.03 0.14 0.04 0.18 0.19 0.14 1.00 0.03 0.17
age 0.54 0.26 0.24 -0.11 -0.04 0.04 0.03 1.00 0.24
class 0.22 0.47 0.07 0.07 0.13 0.29 0.17 0.24 1.00
Die Matrix in der obigen Ausgabe gibt die Korrelation zwischen allen Paaren des Attributs im Datensatz an.
Überprüfen des Versatzes der Attributverteilung
Die Schiefe kann als die Verteilung definiert werden, von der angenommen wird, dass sie Gaußsch ist, die jedoch verzerrt oder in die eine oder andere Richtung oder entweder nach links oder rechts verschoben erscheint. Das Überprüfen der Schiefe von Attributen ist aus folgenden Gründen eine der wichtigsten Aufgaben:
Das Vorhandensein von Schiefe in Daten erfordert die Korrektur in der Datenaufbereitungsphase, damit wir mehr Genauigkeit aus unserem Modell ziehen können.
Die meisten ML-Algorithmen gehen davon aus, dass Daten eine Gaußsche Verteilung haben, dh entweder eine Normalen der Glockenkurvendaten.
In Python können wir den Versatz jedes Attributs mithilfe der Funktion skew () in Pandas DataFrame einfach berechnen.
Beispiel
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
print(data.skew())
Ausgabe
preg 0.90
plas 0.17
pres -1.84
skin 0.11
test 2.27
mass -0.43
pedi 1.92
age 1.13
class 0.64
dtype: float64
Von der obigen Ausgabe kann ein positiver oder negativer Versatz beobachtet werden. Wenn der Wert näher an Null liegt, zeigt er weniger Versatz.