Pembelajaran Mesin dengan Python - Mempersiapkan Data

pengantar

Algoritme Pembelajaran Mesin sepenuhnya bergantung pada data karena ini adalah aspek paling penting yang memungkinkan pelatihan model. Di sisi lain, jika kami tidak dapat memahami data tersebut, sebelum memasukkannya ke algoritme ML, mesin tidak akan berguna. Dengan kata sederhana, kita selalu perlu memberi makan data yang benar yaitu data dalam skala yang benar, format dan berisi fitur yang berarti, untuk masalah yang kita ingin mesin selesaikan.

Ini menjadikan persiapan data sebagai langkah terpenting dalam proses ML. Persiapan data dapat didefinisikan sebagai prosedur yang membuat kumpulan data kami lebih sesuai untuk proses ML.

Mengapa Data Pre-processing?

Setelah memilih data mentah untuk pelatihan ML, tugas terpenting adalah pra-pemrosesan data. Dalam arti luas, preprocessing data akan mengubah data yang dipilih menjadi bentuk yang dapat kami gunakan atau dapat dimasukkan ke algoritme ML. Kami selalu perlu memproses data kami terlebih dahulu agar sesuai dengan harapan algoritme pembelajaran mesin.

Teknik Pra-pemrosesan Data

Kami memiliki teknik preprocessing data berikut yang dapat diterapkan pada kumpulan data untuk menghasilkan data untuk algoritma ML -

Penskalaan

Kemungkinan besar kumpulan data kami terdiri dari atribut dengan skala yang bervariasi, tetapi kami tidak dapat memberikan data tersebut ke algoritme ML sehingga memerlukan penskalaan ulang. Penskalaan ulang data memastikan bahwa atribut memiliki skala yang sama. Umumnya, atribut diskalakan kembali ke dalam rentang 0 dan 1. Algoritme ML seperti penurunan gradien dan k-Nearest Neighbours memerlukan data yang diskalakan. Kita bisa mengubah skala data dengan bantuan kelas MinMaxScaler dari pustaka scikit-learn Python.

Contoh

Dalam contoh ini kita akan melakukan rescale data dari dataset Pima Indians Diabetes yang kita gunakan sebelumnya. Pertama, data CSV akan dimuat (seperti yang dilakukan di bab-bab sebelumnya) dan kemudian dengan bantuan kelas MinMaxScaler, itu akan diskalakan kembali dalam kisaran 0 dan 1.

Beberapa baris pertama dari skrip berikut ini sama seperti yang telah kita tulis di bab sebelumnya saat memuat data CSV.

from pandas import read_csv
from numpy import set_printoptions
from sklearn import preprocessing
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Sekarang, kita dapat menggunakan kelas MinMaxScaler untuk mengubah skala data dalam kisaran 0 dan 1.

data_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
data_rescaled = data_scaler.fit_transform(array)

Kami juga dapat meringkas data untuk output sesuai pilihan kami. Di sini, kami menetapkan presisi ke 1 dan menampilkan 10 baris pertama dalam output.

set_printoptions(precision=1)
print ("\nScaled data:\n", data_rescaled[0:10])

Keluaran

Scaled data:
[
   [0.4 0.7 0.6 0.4 0.  0.5 0.2 0.5 1. ]
   [0.1 0.4 0.5 0.3 0.  0.4 0.1 0.2 0. ]
   [0.5 0.9 0.5 0.  0.  0.3 0.3 0.2 1. ]
   [0.1 0.4 0.5 0.2 0.1 0.4 0.  0.  0. ]
   [0.  0.7 0.3 0.4 0.2 0.6 0.9 0.2 1. ]
   [0.3 0.6 0.6 0.  0.  0.4 0.1 0.2 0. ]
   [0.2 0.4 0.4 0.3 0.1 0.5 0.1 0.1 1. ]
   [0.6 0.6 0.  0.  0.  0.5 0.  0.1 0. ]
   [0.1 1.  0.6 0.5 0.6 0.5 0.  0.5 1. ]
   [0.5 0.6 0.8 0.  0.  0.  0.1 0.6 1. ]
]

Dari output di atas, semua data diskalakan kembali ke kisaran 0 dan 1.

Normalisasi

Teknik preprocessing data berguna lainnya adalah Normalisasi. Ini digunakan untuk mengubah skala setiap baris data agar memiliki panjang 1. Ini berguna terutama dalam dataset Sparse di mana kita memiliki banyak nol. Kita bisa mengubah skala data dengan bantuan kelas Normalizer dari pustaka scikit-learn Python.

Jenis Normalisasi

Dalam pembelajaran mesin, ada dua jenis teknik preprocessing normalisasi sebagai berikut -

Normalisasi L1

Ini dapat didefinisikan sebagai teknik normalisasi yang memodifikasi nilai set data sedemikian rupa sehingga di setiap baris jumlah nilai absolut akan selalu sampai 1. Ini juga disebut Penyimpangan Mutlak Terkecil.

Example

Dalam contoh ini, kami menggunakan teknik L1 Normalize untuk menormalkan data dataset Pima Indians Diabetes yang kami gunakan sebelumnya. Pertama, data CSV akan dimuat dan kemudian dengan bantuan kelas Normalizer akan dinormalisasi.

Beberapa baris pertama dari skrip berikut ini sama seperti yang telah kita tulis di bab sebelumnya saat memuat data CSV.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv (path, names=names)
array = dataframe.values

Sekarang, kita dapat menggunakan kelas Normalizer dengan L1 untuk menormalkan data.

Data_normalizer = Normalizer(norm='l1').fit(array)
Data_normalized = Data_normalizer.transform(array)

Kami juga dapat meringkas data untuk output sesuai pilihan kami. Di sini, kami menetapkan presisi ke 2 dan menampilkan 3 baris pertama di output.

set_printoptions(precision=2)
print ("\nNormalized data:\n", Data_normalized [0:3])

Output

Normalized data:
[
   [0.02 0.43 0.21 0.1  0. 0.1  0. 0.14 0. ]
   [0.   0.36 0.28 0.12 0. 0.11 0. 0.13 0. ]
   [0.03 0.59 0.21 0.   0. 0.07 0. 0.1  0. ]
]

Normalisasi L2

Ini dapat didefinisikan sebagai teknik normalisasi yang mengubah nilai set data sedemikian rupa sehingga di setiap baris jumlah kuadrat akan selalu sampai 1. Ini juga disebut kuadrat terkecil.

Example

Dalam contoh ini, kami menggunakan teknik Normalisasi L2 untuk menormalkan data dataset Pima Indians Diabetes yang kami gunakan sebelumnya. Pertama, data CSV akan dimuat (seperti yang dilakukan pada bab sebelumnya) dan kemudian dengan bantuan kelas Normalizer akan dinormalisasi.

Beberapa baris pertama dari skrip berikut ini sama seperti yang telah kita tulis di bab sebelumnya saat memuat data CSV.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv (path, names=names)
array = dataframe.values

Sekarang, kita dapat menggunakan kelas Normalizer dengan L1 untuk menormalkan data.

Data_normalizer = Normalizer(norm='l2').fit(array)
Data_normalized = Data_normalizer.transform(array)

Kami juga dapat meringkas data untuk output sesuai pilihan kami. Di sini, kami menetapkan presisi ke 2 dan menampilkan 3 baris pertama di output.

set_printoptions(precision=2)
print ("\nNormalized data:\n", Data_normalized [0:3])

Output

Normalized data:
[
   [0.03 0.83 0.4  0.2  0. 0.19 0. 0.28 0.01]
   [0.01 0.72 0.56 0.24 0. 0.22 0. 0.26 0.  ]
   [0.04 0.92 0.32 0.   0. 0.12 0. 0.16 0.01]
]

Binarisasi

Seperti namanya, ini adalah teknik yang dengannya kita dapat membuat biner data kita. Kita dapat menggunakan ambang biner untuk membuat data biner kita. Nilai di atas nilai ambang tersebut akan diubah menjadi 1 dan di bawah ambang tersebut akan diubah menjadi 0. Misalnya, jika kita memilih nilai ambang = 0,5, maka nilai dataset di atasnya akan menjadi 1 dan di bawahnya menjadi 0. Artinya mengapa kita bisa menyebutnyabinarizing data atau thresholdingdata. Teknik ini berguna ketika kita memiliki probabilitas dalam dataset kita dan ingin mengubahnya menjadi nilai yang tajam.

Kita dapat melakukan binarisasi data dengan bantuan kelas Binarizer pustaka scikit-learn Python.

Contoh

Dalam contoh ini, kami akan mengubah skala data dari dataset Pima Indians Diabetes yang kami gunakan sebelumnya. Pertama, data CSV akan dimuat dan kemudian dengan bantuan kelas Binarizer akan diubah menjadi nilai biner yaitu 0 dan 1 tergantung pada nilai ambang batas. Kami mengambil 0,5 sebagai nilai ambang batas.

Beberapa baris pertama dari skrip berikut ini sama seperti yang telah kita tulis di bab sebelumnya saat memuat data CSV.

from pandas import read_csv
from sklearn.preprocessing import Binarizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Sekarang, kita dapat menggunakan kelas Binarize untuk mengubah data menjadi nilai biner.

binarizer = Binarizer(threshold=0.5).fit(array)
Data_binarized = binarizer.transform(array)

Di sini, kami menunjukkan 5 baris pertama dalam output.

print ("\nBinary data:\n", Data_binarized [0:5])

Keluaran

Binary data:
[
   [1. 1. 1. 1. 0. 1. 1. 1. 1.]
   [1. 1. 1. 1. 0. 1. 0. 1. 0.]
   [1. 1. 1. 0. 0. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 0. 1. 0.]
   [0. 1. 1. 1. 1. 1. 1. 1. 1.]
]

Standardisasi

Teknik preprocessing data berguna lainnya yang pada dasarnya digunakan untuk mengubah atribut data dengan distribusi Gaussian. Ini membedakan mean dan SD (Standard Deviation) dengan distribusi Gaussian standar dengan mean 0 dan SD 1. Teknik ini berguna dalam algoritme ML seperti regresi linier, regresi logistik yang mengasumsikan distribusi Gaussian dalam set data masukan dan menghasilkan yang lebih baik hasil dengan data yang diskalakan. Kita dapat membakukan data (mean = 0 dan SD = 1) dengan bantuan kelas StandardScaler pustaka scikit-learn Python.

Contoh

Dalam contoh ini, kami akan mengubah skala data dari dataset Pima Indians Diabetes yang kami gunakan sebelumnya. Pertama, data CSV akan dimuat kemudian dengan bantuan kelas StandardScaler akan diubah menjadi Distribusi Gaussian dengan mean = 0 dan SD = 1.

Beberapa baris pertama dari skrip berikut ini sama seperti yang telah kita tulis di bab sebelumnya saat memuat data CSV.

from sklearn.preprocessing import StandardScaler
from pandas import read_csv
from numpy import set_printoptions
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Sekarang, kita dapat menggunakan kelas StandardScaler untuk mengubah skala data.

data_scaler = StandardScaler().fit(array)
data_rescaled = data_scaler.transform(array)

Kami juga dapat meringkas data untuk output sesuai pilihan kami. Di sini, kami menetapkan presisi ke 2 dan menampilkan 5 baris pertama di output.

set_printoptions(precision=2)
print ("\nRescaled data:\n", data_rescaled [0:5])

Keluaran

Rescaled data:
[
   [ 0.64  0.85  0.15  0.91 -0.69  0.2   0.47  1.43  1.37]
   [-0.84 -1.12 -0.16  0.53 -0.69 -0.68 -0.37 -0.19 -0.73]
   [ 1.23  1.94 -0.26 -1.29 -0.69 -1.1   0.6  -0.11  1.37]
   [-0.84 -1.   -0.16  0.15  0.12 -0.49 -0.92 -1.04 -0.73]
   [-1.14  0.5  -1.5   0.91  0.77  1.41  5.48 -0.02  1.37]
]

Pelabelan Data

Kami membahas pentingnya fata yang baik untuk algoritme ML serta beberapa teknik untuk memproses data sebelumnya sebelum mengirimkannya ke algoritme ML. Satu aspek lagi dalam hal ini adalah pelabelan data. Juga sangat penting untuk mengirimkan data ke algoritme ML yang memiliki pelabelan yang tepat. Misalnya pada kasus masalah klasifikasi, banyak label berupa kata, angka, dll. Pada data tersebut.

Apa itu Label Encoding?

Sebagian besar fungsi sklearn mengharapkan data dengan label angka daripada label kata. Oleh karena itu, kita perlu mengubah label tersebut menjadi label angka. Proses ini disebut pengkodean label. Kita bisa melakukan pengkodean label data dengan bantuan fungsi LabelEncoder () dari pustaka scikit-learn Python.

Contoh

Dalam contoh berikut, skrip Python akan melakukan pengkodean label.

Pertama, impor pustaka Python yang diperlukan sebagai berikut -

import numpy as np
from sklearn import preprocessing

Sekarang, kita perlu memberikan label input sebagai berikut -

input_labels = ['red','black','red','green','black','yellow','white']

Baris kode berikutnya akan membuat pembuat enkode label dan melatihnya.

encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

Baris skrip berikutnya akan memeriksa kinerja dengan menyandikan daftar urutan acak -

test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
print("Encoded values =", list(encoded_values))
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)

Kita bisa mendapatkan daftar nilai yang disandikan dengan bantuan skrip python berikut -

print("\nEncoded values =", encoded_values)
print("\nDecoded labels =", list(decoded_list))

Keluaran

Labels = ['green', 'red', 'black']
Encoded values = [1, 2, 0]
Encoded values = [3, 0, 4, 1]
Decoded labels = ['white', 'black', 'yellow', 'green']