KI mit Python - Datenvorbereitung

Wir haben bereits überwachte und unbeaufsichtigte Algorithmen für maschinelles Lernen untersucht. Diese Algorithmen erfordern formatierte Daten, um den Trainingsprozess zu starten. Wir müssen Daten auf eine bestimmte Weise vorbereiten oder formatieren, damit sie als Eingabe für ML-Algorithmen bereitgestellt werden können.

Dieses Kapitel konzentriert sich auf die Datenaufbereitung für Algorithmen für maschinelles Lernen.

Vorverarbeitung der Daten

In unserem täglichen Leben beschäftigen wir uns mit vielen Daten, aber diese Daten sind in Rohform. Um die Daten als Eingabe für Algorithmen für maschinelles Lernen bereitzustellen, müssen wir sie in aussagekräftige Daten umwandeln. Hier kommt die Datenvorverarbeitung ins Spiel. Mit anderen einfachen Worten können wir sagen, dass wir die Daten vorverarbeiten müssen, bevor wir die Daten für die Algorithmen für maschinelles Lernen bereitstellen.

Schritte zur Datenvorverarbeitung

Befolgen Sie diese Schritte, um die Daten in Python vorzuverarbeiten -

Step 1 − Importing the useful packages - Wenn wir Python verwenden, ist dies der erste Schritt zum Konvertieren der Daten in ein bestimmtes Format, dh zur Vorverarbeitung. Dies kann wie folgt erfolgen:

import numpy as np
import sklearn.preprocessing

Hier haben wir die folgenden zwei Pakete verwendet -

  • NumPy - Grundsätzlich handelt es sich bei NumPy um ein Allzweck-Array-Verarbeitungspaket, mit dem große mehrdimensionale Arrays beliebiger Datensätze effizient bearbeitet werden können, ohne zu viel Geschwindigkeit für kleine mehrdimensionale Arrays zu verlieren.

  • Sklearn.preprocessing - Dieses Paket enthält viele allgemeine Dienstprogrammfunktionen und Transformatorklassen, mit denen Rohmerkmalsvektoren in eine Darstellung geändert werden können, die für Algorithmen für maschinelles Lernen besser geeignet ist.

Step 2 − Defining sample data - Nach dem Import der Pakete müssen einige Beispieldaten definiert werden, damit wir Vorverarbeitungstechniken auf diese Daten anwenden können. Wir werden nun die folgenden Beispieldaten definieren -

input_data = np.array([2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8])

Step3 − Applying preprocessing technique - In diesem Schritt müssen wir eine der Vorverarbeitungstechniken anwenden.

Der folgende Abschnitt beschreibt die Datenvorverarbeitungstechniken.

Techniken zur Datenvorverarbeitung

Die Techniken zur Datenvorverarbeitung werden nachfolgend beschrieben -

Binarisierung

Dies ist die Vorverarbeitungstechnik, die verwendet wird, wenn wir unsere numerischen Werte in Boolesche Werte konvertieren müssen. Wir können eine eingebaute Methode verwenden, um die Eingabedaten zu binarisieren, indem wir beispielsweise 0,5 als Schwellenwert verwenden:

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

Nachdem wir den obigen Code ausgeführt haben, erhalten wir die folgende Ausgabe. Alle Werte über 0,5 (Schwellenwert) werden in 1 und alle Werte unter 0,5 in 0 konvertiert.

Binarized data

[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]

Mittlere Entfernung

Es ist eine weitere sehr verbreitete Vorverarbeitungstechnik, die beim maschinellen Lernen verwendet wird. Grundsätzlich wird es verwendet, um den Mittelwert aus dem Merkmalsvektor zu entfernen, sodass jedes Merkmal auf Null zentriert ist. Wir können auch die Verzerrung aus den Merkmalen im Merkmalsvektor entfernen. Um die Vorverarbeitungstechnik für die mittlere Entfernung auf die Beispieldaten anzuwenden, können wir den unten gezeigten Python-Code schreiben. Der Code zeigt den Mittelwert und die Standardabweichung der Eingabedaten an -

print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))

Nach dem Ausführen der obigen Codezeilen erhalten wir die folgende Ausgabe:

Mean = [ 1.75       -1.275       2.2]
Std deviation = [ 2.71431391  4.20022321  4.69414529]

Mit dem folgenden Code werden nun der Mittelwert und die Standardabweichung der Eingabedaten entfernt.

data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))

Nach dem Ausführen der obigen Codezeilen erhalten wir die folgende Ausgabe:

Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1.             1.             1.]

Skalierung

Es ist eine andere Datenvorverarbeitungstechnik, die zum Skalieren der Merkmalsvektoren verwendet wird. Die Skalierung von Merkmalsvektoren ist erforderlich, da die Werte jedes Merkmals zwischen vielen Zufallswerten variieren können. Mit anderen Worten können wir sagen, dass die Skalierung wichtig ist, weil wir nicht möchten, dass ein Merkmal synthetisch groß oder klein ist. Mit Hilfe des folgenden Python-Codes können wir die Skalierung unserer Eingabedaten durchführen, dh des Merkmalsvektors -

# Min max scaling

data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)

Nach dem Ausführen der obigen Codezeilen erhalten wir die folgende Ausgabe:

Min max scaled data

[ [ 0.48648649  0.58252427   0.99122807]
[   0.          1.           0.81578947]
[   0.27027027  0.           1.        ]
[   1.          0. 99029126  0.        ]]

Normalisierung

Es ist eine andere Datenvorverarbeitungstechnik, die zum Modifizieren der Merkmalsvektoren verwendet wird. Eine solche Modifikation ist notwendig, um die Merkmalsvektoren auf einer gemeinsamen Skala zu messen. Es folgen zwei Arten der Normalisierung, die beim maschinellen Lernen verwendet werden können:

L1 Normalization

Es wird auch als bezeichnet Least Absolute Deviations. Diese Art der Normalisierung ändert die Werte so, dass die Summe der absoluten Werte in jeder Zeile immer bis zu 1 beträgt. Es kann mit Hilfe des folgenden Python-Codes auf den Eingabedaten implementiert werden:

# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)

Die obige Codezeile generiert die folgende Ausgabe & miuns;

L1 normalized data:
[[ 0.22105263  -0.2          0.57894737]
[ -0.2027027    0.32432432   0.47297297]
[  0.03571429  -0.56428571   0.4       ]
[  0.42142857   0.16428571  -0.41428571]]

L2 Normalization

Es wird auch als bezeichnet least squares. Diese Art der Normalisierung ändert die Werte so, dass die Summe der Quadrate in jeder Zeile immer bis zu 1 beträgt. Es kann mit Hilfe des folgenden Python-Codes auf den Eingabedaten implementiert werden:

# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)

Die obige Codezeile generiert die folgende Ausgabe:

L2 normalized data:
[[ 0.33946114  -0.30713151   0.88906489]
[ -0.33325106   0.53320169   0.7775858 ]
[  0.05156558  -0.81473612   0.57753446]
[  0.68706914   0.26784051  -0.6754239 ]]

Beschriften der Daten

Wir wissen bereits, dass Daten in einem bestimmten Format für Algorithmen für maschinelles Lernen erforderlich sind. Eine weitere wichtige Anforderung besteht darin, dass die Daten vor dem Senden als Eingabe von Algorithmen für maschinelles Lernen ordnungsgemäß gekennzeichnet werden müssen. Wenn wir beispielsweise über die Klassifizierung sprechen, enthalten die Daten viele Beschriftungen. Diese Bezeichnungen haben die Form von Wörtern, Zahlen usw. Funktionen im Zusammenhang mit maschinellem Lernen insklearnErwarten Sie, dass die Daten Nummernbezeichnungen haben müssen. Wenn die Daten in einer anderen Form vorliegen, müssen sie daher in Zahlen umgewandelt werden. Dieser Prozess der Umwandlung der Wortbezeichnungen in eine numerische Form wird als Bezeichnungscodierung bezeichnet.

Codierungsschritte für Etiketten

Führen Sie die folgenden Schritte aus, um die Datenbeschriftungen in Python zu codieren.

Step1 − Importing the useful packages

Wenn wir Python verwenden, wäre dies der erste Schritt zum Konvertieren der Daten in ein bestimmtes Format, dh zur Vorverarbeitung. Dies kann wie folgt erfolgen:

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Nach dem Importieren der Pakete müssen wir einige Beispieletiketten definieren, damit wir den Etikettencodierer erstellen und trainieren können. Wir werden nun die folgenden Beispieletiketten definieren -

# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']

Step 3 − Creating & training of label encoder object

In diesem Schritt müssen wir den Etikettencodierer erstellen und trainieren. Der folgende Python-Code hilft dabei:

# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

Das Folgende wäre die Ausgabe nach dem Ausführen des obigen Python-Codes -

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Dieser Schritt kann verwendet werden, um die Leistung durch Codieren der zufällig geordneten Liste zu überprüfen. Der folgende Python-Code kann geschrieben werden, um dasselbe zu tun -

# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)

Die Etiketten würden wie folgt gedruckt:

Labels = ['green', 'red', 'black']

Jetzt können wir die Liste der codierten Werte erhalten, dh Wortbezeichnungen, die wie folgt in Zahlen konvertiert wurden:

print("Encoded values =", list(encoded_values))

Die codierten Werte würden wie folgt gedruckt:

Encoded values = [1, 2, 0]

Step 5 − Checking the performance by decoding a random set of numbers −

Dieser Schritt kann verwendet werden, um die Leistung durch Decodieren des zufälligen Satzes von Zahlen zu überprüfen. Der folgende Python-Code kann geschrieben werden, um dasselbe zu tun -

# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)

Jetzt würden codierte Werte wie folgt gedruckt:

Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))

Jetzt würden dekodierte Werte wie folgt gedruckt:

Decoded labels = ['white', 'black', 'yellow', 'green']

Beschriftete v / s unbeschriftete Daten

Unbeschriftete Daten bestehen hauptsächlich aus Proben von natürlichen oder vom Menschen geschaffenen Objekten, die leicht von der Welt erhalten werden können. Dazu gehören Audio, Video, Fotos, Nachrichtenartikel usw.

Auf der anderen Seite nehmen beschriftete Daten einen Satz unbeschrifteter Daten und ergänzen jedes Stück dieser unbeschrifteten Daten mit einem Tag, einer Beschriftung oder einer Klasse, die von Bedeutung ist. Wenn wir beispielsweise ein Foto haben, kann das Etikett basierend auf dem Inhalt des Fotos angebracht werden, dh es ist ein Foto eines Jungen oder Mädchens oder Tieres oder irgendetwas anderes. Die Kennzeichnung der Daten erfordert menschliches Fachwissen oder Urteilsvermögen in Bezug auf bestimmte unbeschriftete Daten.

Es gibt viele Szenarien, in denen unbeschriftete Daten reichlich vorhanden und leicht zu erhalten sind, beschriftete Daten jedoch häufig von einem Menschen / Experten kommentiert werden müssen. Halbüberwachtes Lernen versucht, beschriftete und unbeschriftete Daten zu kombinieren, um bessere Modelle zu erstellen.