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.