Scikit Learn - Quy ước
Các đối tượng của Scikit-learning chia sẻ một API cơ bản thống nhất bao gồm ba giao diện bổ sung sau:
Estimator interface - Nó là để xây dựng và lắp các mô hình.
Predictor interface - Nó là để đưa ra dự đoán.
Transformer interface - Nó là để chuyển đổi dữ liệu.
Các API áp dụng các quy ước đơn giản và các lựa chọn thiết kế đã được hướng dẫn theo cách để tránh sự phổ biến của mã khung.
Mục đích của Công ước
Mục đích của các quy ước là để đảm bảo rằng API tuân thủ các nguyên tắc chung sau:
Consistency - Tất cả các đối tượng cho dù chúng là cơ bản hay hỗn hợp đều phải chia sẻ một giao diện nhất quán bao gồm một tập hợp các phương thức hạn chế.
Inspection - Các tham số cấu tạo và các giá trị tham số được xác định bởi thuật toán học cần được lưu trữ và hiển thị dưới dạng các thuộc tính công khai.
Non-proliferation of classes - Tập dữ liệu nên được biểu diễn dưới dạng mảng NumPy hoặc ma trận thưa thớt Scipy trong khi tên và giá trị siêu tham số nên được biểu diễn dưới dạng chuỗi Python tiêu chuẩn để tránh sự gia tăng của mã khung.
Composition - Các thuật toán cho dù chúng có thể diễn đạt được dưới dạng chuỗi hoặc sự kết hợp của các phép biến đổi đối với dữ liệu hoặc được xem một cách tự nhiên như các thuật toán meta được tham số hóa trên các thuật toán khác, đều phải được triển khai và cấu thành từ các khối xây dựng hiện có.
Sensible defaults- Trong scikit-learning bất cứ khi nào một thao tác yêu cầu tham số do người dùng xác định, một giá trị mặc định thích hợp sẽ được xác định. Giá trị mặc định này sẽ làm cho hoạt động được thực hiện theo cách hợp lý, ví dụ, đưa ra giải pháp đường cơ sở cho nhiệm vụ đang thực hiện.
Các quy ước khác nhau
Các quy ước có sẵn trong Sklearn được giải thích dưới đây:
Loại đúc
Nó nói rằng đầu vào phải được truyền tới float64. Trong ví dụ sau, trong đósklearn.random_projection mô-đun được sử dụng để giảm kích thước của dữ liệu, sẽ giải thích nó -
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')
Trong ví dụ trên, chúng ta có thể thấy rằng X là float32 được đúc tới float64 bởi fit_transform(X).
Trang bị lại và cập nhật các thông số
Các siêu tham số của một công cụ ước tính có thể được cập nhật và trang bị lại sau khi nó đã được xây dựng thông qua set_params()phương pháp. Hãy xem ví dụ sau để hiểu nó -
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])
Khi công cụ ước tính đã được xây dựng, đoạn mã trên sẽ thay đổi hạt nhân mặc định rbf tuyến tính qua SVC.set_params().
Bây giờ, đoạn mã sau sẽ thay đổi lại hạt nhân thành rbf để trang bị lại bộ ước lượng và đưa ra dự đoán thứ hai.
Example
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])
Output
array([0, 0, 0, 0, 0])
Hoàn thành mã
Sau đây là chương trình thực thi hoàn chỉnh:
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])
Đa thủy tinh & phù hợp nhiều nhãn
Trong trường hợp phù hợp nhiều lớp, cả nhiệm vụ học tập và dự đoán đều phụ thuộc vào định dạng của dữ liệu mục tiêu phù hợp. Mô-đun được sử dụng làsklearn.multiclass. Kiểm tra ví dụ dưới đây, trong đó bộ phân loại nhiều lớp vừa với một mảng 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])
Trong ví dụ trên, bộ phân loại phù hợp với mảng một chiều của các nhãn đa kính và predict()do đó cung cấp dự đoán đa kính tương ứng. Nhưng mặt khác, nó cũng có thể phù hợp với một mảng hai chiều của các chỉ báo nhãn nhị phân như sau:
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]
]
)
Tương tự, trong trường hợp phù hợp nhiều nhãn, một thể hiện có thể được gán nhiều nhãn như sau:
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]
]
)
Trong ví dụ trên, sklearn.MultiLabelBinarizerđược sử dụng để mã hóa mảng đa nhãn hai chiều để vừa với nhau. Đó là lý do tại sao hàm dự đoán () cung cấp một mảng 2d dưới dạng đầu ra với nhiều nhãn cho mỗi trường hợp.