Scikit Learn - Konvensi

Objek Scikit-learn berbagi API dasar seragam yang terdiri dari tiga antarmuka pelengkap berikut -

  • Estimator interface - Ini untuk membangun dan memasang model.

  • Predictor interface - Ini untuk membuat prediksi.

  • Transformer interface - Ini untuk mengubah data.

API mengadopsi konvensi sederhana dan pilihan desain telah dipandu dengan cara untuk menghindari penyebaran kode kerangka kerja.

Tujuan Konvensi

Tujuan konvensi adalah untuk memastikan bahwa API berpegang pada prinsip-prinsip luas berikut -

Consistency - Semua objek apakah itu dasar, atau gabungan harus berbagi antarmuka yang konsisten yang selanjutnya terdiri dari serangkaian metode terbatas.

Inspection - Parameter konstruktor dan nilai parameter yang ditentukan oleh algoritma pembelajaran harus disimpan dan diekspos sebagai atribut publik.

Non-proliferation of classes - Kumpulan data harus direpresentasikan sebagai array NumPy atau matriks jarang Scipy sedangkan nama dan nilai hyper-parameter harus direpresentasikan sebagai string Python standar untuk menghindari proliferasi kode kerangka kerja.

Composition - Algoritme apakah dapat diekspresikan sebagai urutan atau kombinasi transformasi ke data atau secara alami dilihat sebagai meta-algoritme yang diparameterisasi pada algoritme lain, harus diimplementasikan dan disusun dari blok bangunan yang ada.

Sensible defaults- Dalam scikit-learn setiap kali sebuah operasi memerlukan parameter yang ditentukan pengguna, nilai default yang sesuai ditentukan. Nilai default ini harus menyebabkan operasi dilakukan dengan cara yang masuk akal, misalnya, memberikan solusi garis dasar untuk tugas yang sedang ditangani.

Berbagai Konvensi

Konvensi yang tersedia di Sklearn dijelaskan di bawah ini -

Ketik casting

Ini menyatakan bahwa masukan harus dilemparkan ke float64. Dalam contoh berikut, di manasklearn.random_projection modul yang digunakan untuk mengurangi dimensi data, akan menjelaskannya -

Example

import numpy as np
from sklearn import random_projection
rannge = np.random.RandomState(0)
X = range.rand(10,2000)
X = np.array(X, dtype = 'float32')
X.dtype
Transformer_data = random_projection.GaussianRandomProjection()
X_new = transformer.fit_transform(X)
X_new.dtype

Output

dtype('float32')
dtype('float64')

Pada contoh di atas, kita dapat melihat bahwa X adalah float32 yang dilemparkan ke float64 oleh fit_transform(X).

Parameter Refitting & Updating

Hyper-parameter dari suatu estimator dapat diperbarui dan dipasang kembali setelah dibuat melalui set_params()metode. Mari kita lihat contoh berikut untuk memahaminya -

Example

import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
X, y = load_iris(return_X_y = True)
clf = SVC()
clf.set_params(kernel = 'linear').fit(X, y)
clf.predict(X[:5])

Output

array([0, 0, 0, 0, 0])

Setelah estimator dibuat, kode di atas akan mengubah kernel default rbf untuk linier melalui SVC.set_params().

Sekarang, kode berikut akan mengubah kernel menjadi rbf untuk mereparasi estimator dan membuat prediksi kedua.

Example

clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])

Output

array([0, 0, 0, 0, 0])

Kode lengkap

Berikut ini adalah program yang dapat dieksekusi lengkap -

import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
X, y = load_iris(return_X_y = True)
clf = SVC()
clf.set_params(kernel = 'linear').fit(X, y)
clf.predict(X[:5])
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])

Pemasangan multiclass & Multilabel

Dalam kasus pemasangan multikelas, tugas pembelajaran dan prediksi bergantung pada format data target yang sesuai. Modul yang digunakan adalahsklearn.multiclass. Periksa contoh di bawah ini, di mana pengklasifikasi multikelas cocok pada larik 1d.

Example

from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import LabelBinarizer
X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]]
y = [0, 0, 1, 1, 2]
classif = OneVsRestClassifier(estimator = SVC(gamma = 'scale',random_state = 0))
classif.fit(X, y).predict(X)

Output

array([0, 0, 1, 1, 2])

Dalam contoh di atas, pengklasifikasi cocok pada array satu dimensi dari label multikelas dan predict()metode sehingga memberikan prediksi multikelas yang sesuai. Namun di sisi lain, dimungkinkan juga untuk menyesuaikan dengan larik dua dimensi indikator label biner sebagai berikut -

Example

from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import LabelBinarizer
X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]]
y = LabelBinarizer().fit_transform(y)
classif.fit(X, y).predict(X)

Output

array(
   [
      [0, 0, 0],
      [0, 0, 0],
      [0, 1, 0],
      [0, 1, 0],
      [0, 0, 0]
   ]
)

Demikian pula, dalam kasus pemasangan multilabel, sebuah instance dapat diberi beberapa label sebagai berikut -

Example

from sklearn.preprocessing import MultiLabelBinarizer
y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]]
y = MultiLabelBinarizer().fit_transform(y)
classif.fit(X, y).predict(X)

Output

array(
   [
      [1, 0, 1, 0, 0],
      [1, 0, 1, 0, 0],
      [1, 0, 1, 1, 0],
      [1, 0, 1, 1, 0],
      [1, 0, 1, 0, 0]
   ]
)

Dalam contoh di atas, sklearn.MultiLabelBinarizerdigunakan untuk membuat binarisasi array dua dimensi multilabel agar sesuai. Itulah mengapa fungsi predict () memberikan array 2d sebagai output dengan beberapa label untuk setiap instance.