AI z Pythonem - przygotowanie danych

Przebadaliśmy już nadzorowane i nienadzorowane algorytmy uczenia maszynowego. Te algorytmy wymagają sformatowanych danych do rozpoczęcia procesu uczenia. Musimy przygotować lub sformatować dane w określony sposób, aby można je było dostarczyć jako dane wejściowe do algorytmów ML.

W tym rozdziale skupiono się na przygotowaniu danych do algorytmów uczenia maszynowego.

Wstępne przetwarzanie danych

W naszym codziennym życiu mamy do czynienia z dużą ilością danych, ale są to dane surowe. Aby dostarczyć dane jako dane wejściowe algorytmów uczenia maszynowego, musimy je przekształcić w znaczące dane. W tym miejscu pojawia się wstępne przetwarzanie danych. Innymi prostymi słowami, możemy powiedzieć, że przed przekazaniem danych do algorytmów uczenia maszynowego musimy je wstępnie przetworzyć.

Kroki wstępnego przetwarzania danych

Wykonaj następujące kroki, aby wstępnie przetworzyć dane w Pythonie -

Step 1 − Importing the useful packages - Jeśli używamy Pythona, byłby to pierwszy krok do konwersji danych do określonego formatu, tj. Do przetwarzania wstępnego. Można to zrobić w następujący sposób -

import numpy as np
import sklearn.preprocessing

Tutaj użyliśmy następujących dwóch pakietów -

  • NumPy - Zasadniczo NumPy to pakiet do przetwarzania tablic ogólnego przeznaczenia, zaprojektowany do wydajnego manipulowania dużymi wielowymiarowymi tablicami dowolnych rekordów bez poświęcania zbyt dużej szybkości dla małych tablic wielowymiarowych.

  • Sklearn.preprocessing - Ten pakiet zawiera wiele typowych funkcji narzędziowych i klas transformatorów do zmiany surowych wektorów cech w reprezentację, która jest bardziej odpowiednia dla algorytmów uczenia maszynowego.

Step 2 − Defining sample data - Po zaimportowaniu pakietów musimy zdefiniować przykładowe dane, abyśmy mogli zastosować techniki przetwarzania wstępnego na tych danych. Teraz zdefiniujemy następujące przykładowe dane -

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 - Na tym etapie musimy zastosować dowolną z technik przetwarzania wstępnego.

W poniższej sekcji opisano techniki wstępnego przetwarzania danych.

Techniki wstępnego przetwarzania danych

Techniki wstępnego przetwarzania danych opisano poniżej -

Binaryzacja

Jest to technika przetwarzania wstępnego, która jest używana, gdy musimy przekonwertować nasze wartości liczbowe na wartości logiczne. Możemy użyć wbudowanej metody do binaryzacji danych wejściowych, powiedzmy, używając 0,5 jako wartości progowej w następujący sposób -

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

Teraz po uruchomieniu powyższego kodu otrzymamy następujący wynik, wszystkie wartości powyżej 0,5 (wartość progowa) zostaną przekonwertowane na 1, a wszystkie wartości poniżej 0,5 zostaną przekonwertowane na 0.

Binarized data

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

Średnie usuwanie

Jest to kolejna bardzo powszechna technika przetwarzania wstępnego używana w uczeniu maszynowym. Zasadniczo służy do eliminacji średniej z wektora cech, tak aby każda cecha była wyśrodkowana na zerze. Możemy również usunąć odchylenie z cech w wektorze cech. Aby zastosować technikę wstępnego przetwarzania średniego usuwania na przykładowych danych, możemy napisać kod Pythona pokazany poniżej. Kod wyświetli średnią i odchylenie standardowe danych wejściowych -

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

Po uruchomieniu powyższych wierszy kodu otrzymamy następujące dane wyjściowe -

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

Teraz poniższy kod usunie średnią i odchylenie standardowe danych wejściowych -

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

Po uruchomieniu powyższych wierszy kodu otrzymamy następujące dane wyjściowe -

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

skalowanie

Jest to kolejna technika wstępnego przetwarzania danych wykorzystywana do skalowania wektorów cech. Skalowanie wektorów cech jest potrzebne, ponieważ wartości każdej cechy mogą różnić się między wieloma przypadkowymi wartościami. Innymi słowy, możemy powiedzieć, że skalowanie jest ważne, ponieważ nie chcemy, aby jakakolwiek cecha była syntetycznie duża lub mała. Za pomocą następującego kodu Pythona możemy skalować nasze dane wejściowe, tj. Wektor cech -

# 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)

Po uruchomieniu powyższych wierszy kodu otrzymamy następujące dane wyjściowe -

Min max scaled data

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

Normalizacja

Jest to kolejna technika wstępnego przetwarzania danych, która służy do modyfikowania wektorów cech. Taka modyfikacja jest konieczna do pomiaru wektorów cech we wspólnej skali. Poniżej przedstawiono dwa rodzaje normalizacji, które można wykorzystać w uczeniu maszynowym -

L1 Normalization

Jest również określany jako Least Absolute Deviations. Ten rodzaj normalizacji modyfikuje wartości, tak że suma wartości bezwzględnych zawsze wynosi 1 w każdym wierszu. Można go zaimplementować na danych wejściowych za pomocą następującego kodu Pythona -

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

Powyższy wiersz kodu generuje następujące dane wyjściowe & 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

Jest również określany jako least squares. Ten rodzaj normalizacji modyfikuje wartości tak, że suma kwadratów zawsze wynosi 1 w każdym wierszu. Można go zaimplementować na danych wejściowych za pomocą następującego kodu Pythona -

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

Powyższy wiersz kodu wygeneruje następujące dane wyjściowe -

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 ]]

Etykietowanie danych

Wiemy już, że do algorytmów uczenia maszynowego potrzebne są dane w określonym formacie. Innym ważnym wymogiem jest to, że dane muszą być odpowiednio oznaczone przed wysłaniem ich jako dane wejściowe algorytmów uczenia maszynowego. Na przykład, jeśli mówimy o klasyfikacji, na danych znajduje się wiele etykiet. Te etykiety mają postać słów, liczb itp. Funkcje związane z uczeniem maszynowym wsklearnspodziewać się, że dane muszą mieć etykiety z numerami. Stąd, jeśli dane są w innej formie, należy je przekonwertować na liczby. Ten proces przekształcania etykiet słów w postać numeryczną nazywa się kodowaniem etykiet.

Etapy kodowania etykiet

Wykonaj następujące kroki, aby zakodować etykiety danych w Pythonie -

Step1 − Importing the useful packages

Jeśli używamy Pythona, byłby to pierwszy krok do konwersji danych do określonego formatu, tj. Do przetwarzania wstępnego. Można to zrobić w następujący sposób -

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Po zaimportowaniu pakietów musimy zdefiniować kilka przykładowych etykiet, abyśmy mogli utworzyć i wyszkolić koder etykiet. Teraz zdefiniujemy następujące przykładowe etykiety -

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

Step 3 − Creating & training of label encoder object

Na tym etapie musimy utworzyć koder etykiet i wyszkolić go. Poniższy kod Pythona pomoże w tym -

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

Po uruchomieniu powyższego kodu w języku Python pojawiłyby się dane wyjściowe:

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Ten krok można wykorzystać do sprawdzenia wydajności poprzez zakodowanie losowo uporządkowanej listy. Poniższy kod Pythona można napisać, aby zrobić to samo -

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

Etykiety zostaną wydrukowane w następujący sposób -

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

Teraz możemy uzyskać listę zakodowanych wartości, czyli etykiet słów przekonwertowanych na liczby w następujący sposób -

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

Zakodowane wartości zostaną wydrukowane w następujący sposób -

Encoded values = [1, 2, 0]

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

Ten krok może służyć do sprawdzenia wydajności poprzez dekodowanie losowego zestawu liczb. Poniższy kod Pythona można napisać, aby zrobić to samo -

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

Teraz zakodowane wartości zostaną wydrukowane w następujący sposób -

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

Teraz zdekodowane wartości zostaną wydrukowane w następujący sposób -

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

Dane oznaczone etykietami v / s Unlabeled Data

Dane nieoznakowane składają się głównie z próbek obiektów naturalnych lub stworzonych przez człowieka, które można łatwo uzyskać ze świata. Obejmują one audio, wideo, zdjęcia, artykuły z wiadomościami itp.

Z drugiej strony, oznaczone dane pobierają zestaw nieoznaczonych danych i uzupełniają każdy element tych nieoznaczonych danych jakimś znacznikiem, etykietą lub klasą, która ma znaczenie. Na przykład, jeśli mamy zdjęcie, etykietę można umieścić na podstawie treści zdjęcia, tj. Jest to zdjęcie chłopca lub dziewczynki, zwierzęcia lub cokolwiek innego. Oznakowanie danych wymaga specjalistycznej wiedzy lub oceny danego fragmentu nieoznaczonych danych.

Istnieje wiele scenariuszy, w których nieoznaczone dane są obfite i łatwe do uzyskania, ale dane oznaczone etykietami często wymagają adnotacji przez człowieka / eksperta. Częściowo nadzorowane uczenie się próbuje połączyć dane oznaczone i nieoznaczone w celu zbudowania lepszych modeli.