AI dengan Python - Persiapan Data

Kami telah mempelajari algoritme pembelajaran mesin yang diawasi dan juga tanpa pengawasan. Algoritme ini membutuhkan data yang diformat untuk memulai proses pelatihan. Kita harus mempersiapkan atau memformat data dengan cara tertentu agar dapat disuplai sebagai masukan untuk algoritma ML.

Bab ini berfokus pada persiapan data untuk algoritme pembelajaran mesin.

Memproses Data

Dalam kehidupan sehari-hari, kita berurusan dengan banyak data tetapi data ini dalam bentuk mentah. Untuk menyediakan data sebagai input algoritma pembelajaran mesin, kita perlu mengubahnya menjadi data yang bermakna. Di situlah preprocessing data muncul. Dengan kata sederhana lainnya, kita dapat mengatakan bahwa sebelum memberikan data ke algoritme pembelajaran mesin, kita perlu memproses data sebelumnya.

Langkah-langkah preprocessing data

Ikuti langkah-langkah ini untuk memproses data dengan Python -

Step 1 − Importing the useful packages - Jika kita menggunakan Python maka ini akan menjadi langkah pertama untuk mengubah data ke format tertentu, yaitu preprocessing. Itu dapat dilakukan sebagai berikut -

import numpy as np
import sklearn.preprocessing

Di sini kami telah menggunakan dua paket berikut -

  • NumPy - Pada dasarnya NumPy adalah paket pemrosesan array tujuan umum yang dirancang untuk secara efisien memanipulasi array multi-dimensi besar dari catatan arbitrer tanpa mengorbankan terlalu banyak kecepatan untuk array multi-dimensi kecil.

  • Sklearn.preprocessing - Paket ini menyediakan banyak fungsi utilitas umum dan kelas transformator untuk mengubah vektor fitur mentah menjadi representasi yang lebih cocok untuk algoritme pembelajaran mesin.

Step 2 − Defining sample data - Setelah paket-paket tersebut diimpor, kita perlu mendefinisikan beberapa contoh data agar dapat menerapkan teknik preprocessing pada data tersebut. Kami sekarang akan menentukan data sampel berikut -

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 - Pada langkah ini, kita perlu menerapkan salah satu teknik preprocessing.

Bagian berikut menjelaskan teknik preprocessing data.

Teknik Pemrosesan Awal Data

Teknik preprocessing data dijelaskan di bawah ini -

Binarisasi

Ini adalah teknik preprocessing yang digunakan ketika kita perlu mengubah nilai numerik kita menjadi nilai Boolean. Kita dapat menggunakan metode inbuilt untuk binarize data masukan katakan dengan menggunakan 0,5 sebagai nilai ambang dengan cara berikut -

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

Nah, setelah menjalankan kode di atas kita akan mendapatkan output sebagai berikut, semua nilai di atas 0,5 (nilai ambang) akan diubah menjadi 1 dan semua nilai di bawah 0,5 akan diubah menjadi 0.

Binarized data

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

Penghapusan Berarti

Ini adalah teknik praproses lain yang sangat umum yang digunakan dalam pembelajaran mesin. Pada dasarnya ini digunakan untuk menghilangkan mean dari vektor fitur sehingga setiap fitur berpusat pada nol. Kami juga dapat menghilangkan bias dari fitur-fitur dalam vektor fitur. Untuk menerapkan teknik preprocessing mean removal pada data sampel, kita dapat menulis kode Python di bawah ini. Kode akan menampilkan Mean dan Deviasi standar dari data input -

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

Kami akan mendapatkan output berikut setelah menjalankan baris kode di atas -

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

Sekarang, kode di bawah ini akan menghapus Mean dan Deviasi standar dari data input -

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

Kami akan mendapatkan output berikut setelah menjalankan baris kode di atas -

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

Penskalaan

Ini adalah teknik preprocessing data lain yang digunakan untuk menskalakan vektor fitur. Penskalaan vektor fitur diperlukan karena nilai setiap fitur dapat bervariasi di antara banyak nilai acak. Dengan kata lain, kami dapat mengatakan bahwa penskalaan penting karena kami tidak ingin fitur apa pun menjadi besar atau kecil secara sintetis. Dengan bantuan kode Python berikut, kita dapat melakukan penskalaan data input kita, yaitu vektor fitur -

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

Kami akan mendapatkan output berikut setelah menjalankan baris kode di atas -

Min max scaled data

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

Normalisasi

Ini adalah teknik preprocessing data lain yang digunakan untuk memodifikasi vektor fitur. Modifikasi semacam itu diperlukan untuk mengukur vektor fitur pada skala yang sama. Berikut adalah dua jenis normalisasi yang dapat digunakan dalam pembelajaran mesin -

L1 Normalization

Ini juga disebut sebagai Least Absolute Deviations. Jenis normalisasi ini mengubah nilai sehingga jumlah nilai absolut selalu 1 di setiap baris. Ini dapat diimplementasikan pada data input dengan bantuan kode Python berikut -

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

Baris kode di atas menghasilkan keluaran berikut & 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

Ini juga disebut sebagai least squares. Jenis normalisasi ini mengubah nilai sehingga jumlah kuadrat selalu berjumlah 1 di setiap baris. Ini dapat diimplementasikan pada data input dengan bantuan kode Python berikut -

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

Baris kode di atas akan menghasilkan output berikut -

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

Memberi Label pada Data

Kita sudah tahu bahwa data dalam format tertentu diperlukan untuk algoritme pembelajaran mesin. Persyaratan penting lainnya adalah bahwa data harus diberi label dengan benar sebelum dikirim sebagai masukan algoritme pembelajaran mesin. Misalnya jika kita berbicara tentang klasifikasi, ada banyak label pada data tersebut. Label tersebut berupa kata, angka, dll. Fungsi yang terkait dengan machine learning disklearnberharap bahwa data harus memiliki label angka. Oleh karena itu, jika data dalam bentuk lain maka harus diubah menjadi angka. Proses mengubah label kata menjadi bentuk numerik disebut pengkodean label.

Langkah-langkah pengkodean label

Ikuti langkah-langkah ini untuk mengenkode label data dengan Python -

Step1 − Importing the useful packages

Jika kita menggunakan Python maka ini akan menjadi langkah pertama untuk mengubah data ke format tertentu, yaitu preprocessing. Itu dapat dilakukan sebagai berikut -

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Setelah mengimpor paket, kita perlu menentukan beberapa contoh label sehingga kita dapat membuat dan melatih pembuat enkode label. Kami sekarang akan menentukan label sampel berikut -

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

Step 3 − Creating & training of label encoder object

Pada langkah ini, kita perlu membuat encoder label dan melatihnya. Kode Python berikut akan membantu dalam melakukan ini -

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

Berikut ini akan menjadi output setelah menjalankan kode Python di atas -

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Langkah ini dapat digunakan untuk memeriksa kinerja dengan menyandikan daftar urutan acak. Kode Python berikut dapat ditulis untuk melakukan hal yang sama -

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

Label akan dicetak sebagai berikut -

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

Sekarang, kita bisa mendapatkan daftar nilai yang dikodekan yaitu label kata yang diubah menjadi angka sebagai berikut -

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

Nilai yang dikodekan akan dicetak sebagai berikut -

Encoded values = [1, 2, 0]

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

Langkah ini dapat digunakan untuk memeriksa kinerja dengan mendekode rangkaian angka acak. Kode Python berikut dapat ditulis untuk melakukan hal yang sama -

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

Sekarang, nilai yang dikodekan akan dicetak sebagai berikut -

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

Sekarang, nilai yang didekodekan akan dicetak sebagai berikut -

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

V / s Data Tidak Berlabel

Data tidak berlabel terutama terdiri dari sampel objek alam atau buatan manusia yang dapat dengan mudah diperoleh dari dunia. Mereka termasuk, audio, video, foto, artikel berita, dll.

Di sisi lain, data berlabel mengambil sekumpulan data yang tidak berlabel dan menambahkan setiap bagian dari data yang tidak berlabel itu dengan beberapa tag atau label atau kelas yang bermakna. Misalnya jika kita memiliki foto maka label dapat dipasang berdasarkan konten foto tersebut, yaitu foto anak laki-laki atau perempuan atau hewan atau yang lainnya. Memberi label pada data membutuhkan keahlian atau penilaian manusia tentang bagian tertentu dari data tidak berlabel.

Ada banyak skenario di mana data tidak berlabel banyak dan mudah diperoleh, tetapi data berlabel sering kali membutuhkan manusia / ahli untuk membuat anotasi. Pembelajaran semi-supervisi berupaya menggabungkan data berlabel dan tidak berlabel untuk membuat model yang lebih baik.