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