Scikit-Learn Cheat Sheet untuk Data Science

By | November 14, 2021
3,318 Views

Scikit-learn adalah library machine learning open source  untuk bahasa pemrograman Python. Ini fitur berbagai klasifikasi, regresi, algoritma pengelompokan, dan alat yang efisien untuk data mining dan analisis data. Ini dibangun di atas NumPy, SciPy, dan Matplotlib. Pada buku yang telah saya terbitkan pernah dibahas koq, ini tambahan juga, maka saya berikan judul Scikit-Learn Cheat Sheet untuk Data Science.

Kode di bawah ini menunjukkan langkah-langkah dasar menggunakan scikit-learn untuk membuat dan menjalankan model pada satu set data. Langkah-langkah dalam kode meliputi: memuat data, membelah menjadi kereta api dan set uji, menskalakan set, membuat model, menyesuaikan model pada data, menggunakan model terlatih untuk membuat prediksi pada set tes, dan akhirnya mengevaluasi kinerja model. Seperti biasa kita akan menggunakan dataset iris. Begini kode yang kita akan gunakan secara sekilas.

from sklearn import neighbors, datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler


iris = datasets.load_iris()

X,y = iris.data[:,:2], iris.target

X_train, X_test, y_train, y_test = train_test_split(X,y)

scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

knn = neighbors.KNeighborsClassifier(n_neighbors = 5)
knn.fit(X_train, y_train)

y_pred = knn.predict(X_test)
accuracy_score(y_test, y_pred)

Loading Data

Data mu harus bertipe numerik dan disimpan sebagai array NumPy atau matriks cadangan SciPy. Jenis lain yang dikonversi ke array numerik, seperti Pandas DataFrame juga dapat diterima. Tapi saya lebih suka menggunakan Numpy saja

>>> import numpy as np
>>> X = np.random.random((10,5))
array([[0.21069686, 0.33457064],
       [0.23887117, 0.6093155 ],
       [0.48848537, 0.62649292]])
>>> y = np.array(['A','B','A'])
array(['A', 'B', 'A'])

Training and Test Data

Membagi dataset menjadi pelatihan dan set uji untuk variabel X dan y. Oiya hati-hati ya, python adalah bahasa case sensitif jadi huruf besar dan kecil itu beda tidak seperti bahasa basic

>>> from sklearn.model_selection import train_test_split
>>> X_train,X_test,y_train,y_test = train_test_split(X,y, random_state = 0)

Oiya pengaturan split dataset diatas, bisa kalian berikan opsi seperti berapa ratio yang digunakan, disini

See also  Membuat Aplikasi berbasis Web

Preprocessing Data

Siapkan data sebelum model difit kan/proses, ada banyak cara yang digunakan tergantung tipe data apakah numerik, kategorikal, ataupun range.  Dibahas juga cara menangani missing value.

1. Standardization

Standarisasi adalah fitur dengan menghapus rata-rata dan penskalaan ke varians unit.

>>> from sklearn.preprocessing import StandardScaler
>>> scaler = StandardScaler().fit(X_train)
>>> standarized_X = scaler.transform(X_train)
>>> standarized_X_test = scaler.transform(X_test)

2. Normalization

Setiap sampel (yaitu setiap baris matriks data) dengan setidaknya satu komponen non-nol diskalakan ulang secara independen dari sampel lain sehingga normanya sama dengan satu/jumlah totalnya 1.

>>> from sklearn.preprocessing import Normalizer
>>> scaler = Normalizer().fit(X_train)
>>> normalized_X = scaler.transform(X_train)
>>> normalized_X_test = scaler.transform(X_test)

3. Binarization

Data binarize (mengatur nilai fitur ke 0 atau 1) sesuai dengan ambang batas.

>>> from sklearn.preprocessing import Binarizer
>>> binarizer = Binarizer(threshold = 0.0).fit(X)
>>> binary_X = binarizer.transform(X_test)

4. Encoding Categorical Features

Label target Encode dengan nilai antara 0 dan n_classes-1.

>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit_transform(X_train)

5. Imputing Missing Values

Pengisian data yang kosong dengan nilai reratanya, biasanya data yang sangat besar bisa terjadi banyak missing value.

>>> from sklearn.impute import SimpleImputer
>>> imp = SimpleImputer(missing_values = 0, strategy = 'mean')
>>> imp.fit_transform(X_train)

6. Generating Polynomial Features

Hasilkan matriks fitur baru yang terdiri dari semua kombinasi polinomial dari fitur dengan derajat kurang dari atau sama dengan tingkat yang ditentukan.

>>> from sklearn.preprocessing import PolynomialFeatures
>>> poly = PolynomialFeatures(5)
>>> poly.fit_transform(X)

Create Model

Membuat model dengan algoritma supervised and unsupervised learning. Untuk penjelasan masing-masing algoritma, sudah saya jabarkan dengan beragam bahasa, kalian bisa searching sendiri di website ini. Ataupun mengajukan pertanyaan via email jika ulasan di website ini kurang memuaskan.

Supervised Learning Models

Algoritma machine learning terawasi yang artinya target sudah ditentukan dari awal. Adapun target disini bisa berupa kelas, angka, dan jumlah cluster bila algoritma tersebut termasuk clustering

>>> from sklearn.linear_model import LinearRegression
>>> lr  = LinearRegression(normalize = True)
>>> from sklearn.svm import SVC
>>> svc = SVC(kernel = 'linear')
>>> from sklearn.naive_bayes import GaussianNB
>>> gnb = GaussianNB()
>>> from sklearn import neighbors
>>> knn = neighbors.KNeighborsClassifier(n_neighbors = 5)

Unsupervised Learning Models

Algoritma ini bekerja dengan memerlukan target akan tetapi machine belajar sendiri dalam menentukan target berdasarkan paramater tertentu. Seperti jarak antar anggota, jarak antar cluster, serta ambang batas.

>>> from sklearn.decomposition import PCA
>>> pca = PCA(n_components = 0.95)
>>> from sklearn.cluster import KMeans
>>> k_means = KMeans(n_clusters = 3, random_state = 0)

Model Fitting

Model fitting yaitu menguji perhitungan algoritma. Bila menggunakan Scikit maka method/function yang dipanggil yaitu fit(). Semuanya sama baik menggunakan supervised dan unsupervised learning.

See also  Membuat Dashboard Interaktif

Supervised learning

  • Fit model data
>>> lr.fit(X, y)
>>> knn.fit(X_train,y_train)
>>> svc.fit(X_train,y_train)

Unsupervised learning

  • Fit model data
>>> k_means.fit(X_train)
  • Fit  data dan lakukan transform
>>> pca_model = pca.fit_transform(X_train)

Prediction

Prediksi test menggunakan model yang sudah training

  • Prediksi label/target
#Supervised Estimators
>>> y_pred = lr.predict(X_test)
#Unsupervised Estimators
>>> y_pred = k_means.predict(X_test)
  • Estimasi probabilitas
>>> y_pred = knn.predict_proba(X_test)

Evaluasi Kinerja Model

Untuk mengukur/evaluasi kinerja model ada banyak cara yang digunakan tergantung kasus seperti klasifikasi atau regresi dan clustering

Classification Metrics

  • Accuracy Score
>>> knn.score(X_test,y_test)
>>> from sklearn.metrics import accuracy_score
>>> accuracy_score(y_test,y_pred)
  • Classification Report
>>> from sklearn.metrics import classification_report
>>> print(classification_report(y_test,y_pred))
  • Confusion Matrix
>>> from sklearn .metrics import confusion_matrix
>>> print(confusion_matrix(y_test,y_pred))

Regression Metrics

Untuk pembahasan pengukuran regression metrics disini

  • Mean Absolute Error
>>> from sklearn.metrics import mean_absolute_error
>>> mean_absolute_error(y_test,y_pred)
  • Mean Squared Error
>>> from sklearn.metrics import mean_squared_error
>>> mean_squared_error(y_test,y_pred)
  • R² Score
>>> from sklearn.metrics import r2_score
>>> r2_score(y_test, y_pred)

Clustering Metrics

  • Adjusted Rand Index
>>> from sklearn.metrics import adjusted_rand_score
>>> adjusted_rand_score(y_test,y_pred)
  • Homogeneity
>>> from sklearn.metrics import homogeneity_score
>>> homogeneity_score(y_test,y_pred)
  • V-measure
>>> from sklearn.metrics import v_measure_score
>>> v_measure_score(y_test,y_pred)

Cross-Validation

  • Score Evaluasi dengan cross-validation
>>> from sklearn.model_selection import cross_val_score
>>> print(cross_val_score(knn, X_train, y_train, cv=4))

Tuning Model

Tuning / menemukan nilai parameter yang benar yang akan memaksimalkan akurasi prediksi model. Ada 2 cara yang digunakan yaitu

  1. pencarian menggunakan iterasi tertentu, misalkan jika paramater tersebut mempunyai pengaturan jumlah minimal keanggotaan, maka bisa dicoba dengan membuat pengaturan 1 sampai n keanggotaan
  2. random menggunakan nilai acak tertentu jadi tidak semuanya dicoba satu-persatu

Grid Search

Pencarian lengkap atas nilai parameter tertentu untuk estimator. Contoh di bawah ini mencoba untuk menemukan jumlah cluster yang tepat untuk menentukan knn untuk memaksimalkan akurasi model. Biasanya dilakukan menggunakan teknik looping, tapi dalam keadaan tertentu paramater function menerima argument array sehingga tidak perlu membuat looping tersendiri. Contoh dibawah ini array [1:3] sebagai pencarian yang terbaik berdasarkan jumlah minimal tetangga pada KNN

>>> from sklearn.model_selection import GridSearchCV
>>> params = {'n_neighbors': np.arange(1,3), 'metric':['euclidean','cityblock']}
>>> grid = GridSearchCV(estimator = knn, param_grid = params)
>>> grid.fit(X_train, y_train)
>>> print(grid.best_score_)
>>> print(grid.best_estimator_.n_neighbors)

Menggunakan GridSearchCV untuk menentukan paramater terbaik di KNN

See also  Aplikasi Interaktif Berbasis Web

Randomized Parameter Optimization

Pencarian acak pada hiperparameter. Berbeda dengan Pencarian Grid, tidak semua nilai parameter dicoba, melainkan sejumlah pengaturan parameter tetap diambil sampelnya dari distribusi yang ditentukan. Jumlah pengaturan parameter yang dicoba diberikan oleh n_iter.

>>> from sklearn.model_selection import RandomizedSearchCV
>>> params = {'n_neighbors':range(1,5), 'weights':['uniform','distance']}
>>> rsearch = RandomizedSearchCV(estimator = knn, param_distributions = params, cv = 4, n_iter = 8, random_state = 5)
>>> rseach.fit(X_train, y_train)
>>> print(rsearch.best_score_)

Scikit-learn adalah library yang sangat berguna untuk berbagai model machine learning. Bagian-bagian di atas memberikan proses langkah demi langkah dasar untuk melakukan analisis pada model yang berbeda. Namun, jika kalian ingin mempelajari lebih lanjut, lihat dokumentasi untuk Scikit-Learn, karena masih ada banyak fungsi bermanfaat yang dapat kalian pelajari.

Akhirnya selesai juga pembahasan mengenai Scikit-Learn Cheat Sheet untuk Data Science. Happy coding