Scikit Learn - Proses Pemodelan

Bab ini membahas proses pemodelan yang terlibat dalam Sklearn. Mari kita pahami hal yang sama secara detail dan mulai dengan pemuatan dataset.

Pemuatan Set Data

Kumpulan data disebut dataset. Itu memiliki dua komponen berikut -

Features- Variabel data disebut fiturnya. Mereka juga dikenal sebagai prediktor, input, atau atribut.

  • Feature matrix - Ini adalah kumpulan fitur, jika ada lebih dari satu.

  • Feature Names - Ini adalah daftar semua nama fitur.

Response- Ini adalah variabel keluaran yang pada dasarnya bergantung pada variabel fitur. Mereka juga dikenal sebagai target, label, atau keluaran.

  • Response Vector- Digunakan untuk merepresentasikan kolom respon. Umumnya, kami hanya memiliki satu kolom tanggapan.

  • Target Names - Ini mewakili nilai yang mungkin diambil oleh vektor respons.

Scikit-learn memiliki beberapa contoh kumpulan data iris dan digits untuk klasifikasi dan Boston house prices untuk regresi.

Contoh

Berikut adalah contoh untuk dimuat iris kumpulan data -

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names
target_names = iris.target_names
print("Feature names:", feature_names)
print("Target names:", target_names)
print("\nFirst 10 rows of X:\n", X[:10])

Keluaran

Feature names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Target names: ['setosa' 'versicolor' 'virginica']
First 10 rows of X:
[
   [5.1 3.5 1.4 0.2]
   [4.9 3. 1.4 0.2]
   [4.7 3.2 1.3 0.2]
   [4.6 3.1 1.5 0.2]
   [5. 3.6 1.4 0.2]
   [5.4 3.9 1.7 0.4]
   [4.6 3.4 1.4 0.3]
   [5. 3.4 1.5 0.2]
   [4.4 2.9 1.4 0.2]
   [4.9 3.1 1.5 0.1]
]

Memisahkan dataset

Untuk memeriksa keakuratan model kami, kami dapat membagi dataset menjadi dua bagian-a training set dan a testing set. Gunakan set pelatihan untuk melatih model dan set pengujian untuk menguji model. Setelah itu, kami dapat mengevaluasi seberapa baik model kami.

Contoh

Contoh berikut akan membagi data menjadi rasio 70:30, yaitu 70% data akan digunakan sebagai data latih dan 30% akan digunakan sebagai data uji. Dataset tersebut merupakan dataset iris seperti contoh di atas.

from sklearn.datasets import load_iris
iris = load_iris()

X = iris.data
y = iris.target

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
   X, y, test_size = 0.3, random_state = 1
)

print(X_train.shape)
print(X_test.shape)

print(y_train.shape)
print(y_test.shape)

Keluaran

(105, 4)
(45, 4)
(105,)
(45,)

Seperti yang terlihat pada contoh di atas, ini menggunakan train_test_split()fungsi scikit-learn untuk membagi dataset. Fungsi ini memiliki argumen berikut -

  • X, y - Di sini, X adalah feature matrix dan y adalah response vector, yang perlu dipecah.

  • test_size- Ini mewakili rasio data uji terhadap total data yang diberikan. Seperti pada contoh di atas, kita sedang melakukan settingtest_data = 0.3 untuk 150 baris X. Ini akan menghasilkan data uji 150 * 0,3 = 45 baris.

  • random_size- Ini digunakan untuk menjamin bahwa pembagian akan selalu sama. Ini berguna dalam situasi di mana Anda ingin hasil yang dapat direproduksi.

Latih Modelnya

Selanjutnya, kita bisa menggunakan dataset kita untuk melatih beberapa model prediksi. Seperti yang telah dibahas, scikit-learn memiliki jangkauan yang luasMachine Learning (ML) algorithms yang memiliki antarmuka yang konsisten untuk pemasangan, prediksi akurasi, penarikan kembali, dll.

Contoh

Dalam contoh di bawah ini, kita akan menggunakan pengklasifikasi KNN (K tetangga terdekat). Jangan membahas detail algoritma KNN, karena akan ada bab terpisah untuk itu. Contoh ini digunakan untuk membuat Anda memahami bagian implementasi saja.

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
   X, y, test_size = 0.4, random_state=1
)
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
classifier_knn = KNeighborsClassifier(n_neighbors = 3)
classifier_knn.fit(X_train, y_train)
y_pred = classifier_knn.predict(X_test)
# Finding accuracy by comparing actual response values(y_test)with predicted response value(y_pred)
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
# Providing sample data and the model will make prediction out of that data

sample = [[5, 5, 3, 2], [2, 4, 3, 5]]
preds = classifier_knn.predict(sample)
pred_species = [iris.target_names[p] for p in preds] print("Predictions:", pred_species)

Keluaran

Accuracy: 0.9833333333333333
Predictions: ['versicolor', 'virginica']

Ketekunan Model

Setelah Anda melatih model, sebaiknya model tersebut dipertahankan untuk penggunaan di masa mendatang sehingga kami tidak perlu melatihnya lagi dan lagi. Itu bisa dilakukan dengan bantuandump dan load fitur dari joblib paket.

Pertimbangkan contoh di bawah ini di mana kita akan menyimpan model terlatih di atas (classifier_knn) untuk digunakan di masa mendatang -

from sklearn.externals import joblib
joblib.dump(classifier_knn, 'iris_classifier_knn.joblib')

Kode di atas akan menyimpan model ke dalam file bernama iris_classifier_knn.joblib. Sekarang, objek dapat dimuat ulang dari file dengan bantuan kode berikut -

joblib.load('iris_classifier_knn.joblib')

Memproses Data

Karena kita berurusan dengan banyak data dan data itu dalam bentuk mentah, sebelum memasukkan data itu ke algoritma pembelajaran mesin, kita perlu mengubahnya menjadi data yang bermakna. Proses ini disebut preprocessing data. Scikit-learn memiliki nama paketpreprocessinguntuk tujuan ini. Itupreprocessing paket memiliki teknik berikut -

Binarisasi

Teknik preprocessing ini digunakan ketika kita perlu mengubah nilai numerik kita menjadi nilai Boolean.

Contoh

import numpy as np
from sklearn import preprocessing
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]]
)
data_binarized = preprocessing.Binarizer(threshold=0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

Dalam contoh di atas, kami menggunakan threshold value = 0,5 dan itulah sebabnya, semua nilai di atas 0,5 akan diubah menjadi 1, dan semua nilai di bawah 0,5 akan diubah menjadi 0.

Keluaran

Binarized data:
[
   [ 1. 0. 1.]
   [ 0. 1. 1.]
   [ 0. 0. 1.]
   [ 1. 1. 0.]
]

Penghapusan Berarti

Teknik ini digunakan untuk menghilangkan mean dari vektor ciri sehingga setiap ciri berpusat pada nol.

Contoh

import numpy as np
from sklearn import preprocessing
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]]
)

#displaying the mean and the standard deviation of the input data
print("Mean =", input_data.mean(axis=0))
print("Stddeviation = ", input_data.std(axis=0))
#Removing the mean and the standard deviation of the input data

data_scaled = preprocessing.scale(input_data)
print("Mean_removed =", data_scaled.mean(axis=0))
print("Stddeviation_removed =", data_scaled.std(axis=0))

Keluaran

Mean = [ 1.75 -1.275 2.2 ]
Stddeviation = [ 2.71431391 4.20022321 4.69414529]
Mean_removed = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Stddeviation_removed = [ 1. 1. 1.]

Penskalaan

Kami menggunakan teknik preprocessing ini untuk menskalakan vektor fitur. Penskalaan vektor fitur itu penting, karena fitur tidak boleh besar atau kecil secara sintetis.

Contoh

import numpy as np
from sklearn import preprocessing
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]
   ]
)
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)

Keluaran

Min max scaled data:
[
   [ 0.48648649 0.58252427 0.99122807]
   [ 0. 1. 0.81578947]
   [ 0.27027027 0. 1. ]
   [ 1. 0.99029126 0. ]
]

Normalisasi

Kami menggunakan teknik preprocessing ini untuk memodifikasi vektor fitur. Normalisasi vektor fitur diperlukan agar vektor fitur dapat diukur pada skala yang sama. Ada dua jenis normalisasi sebagai berikut -

Normalisasi L1

Ini juga disebut Penyimpangan Mutlak Terkecil. Ini mengubah nilai sedemikian rupa sehingga jumlah nilai absolut tetap selalu hingga 1 di setiap baris. Contoh berikut menunjukkan implementasi normalisasi L1 pada data masukan.

Contoh

import numpy as np
from sklearn import preprocessing
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]
   ]
)
data_normalized_l1 = preprocessing.normalize(input_data, norm='l1')
print("\nL1 normalized data:\n", data_normalized_l1)

Keluaran

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

Normalisasi L2

Juga disebut Kotak Terkecil. Ini mengubah nilai sedemikian rupa sehingga jumlah kuadrat tetap selalu hingga 1 di setiap baris. Contoh berikut menunjukkan implementasi normalisasi L2 pada data masukan.

Contoh

import numpy as np
from sklearn import preprocessing
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]
   ]
)
data_normalized_l2 = preprocessing.normalize(input_data, norm='l2')
print("\nL1 normalized data:\n", data_normalized_l2)

Keluaran

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