Scikit Learn - API ước tính
Trong chương này, chúng ta sẽ tìm hiểu về Estimator API(giao diện lập trình ứng dụng). Chúng ta hãy bắt đầu bằng cách hiểu API Công cụ ước tính là gì.
API công cụ ước tính là gì
Nó là một trong những API chính do Scikit-learning triển khai. Nó cung cấp một giao diện nhất quán cho một loạt các ứng dụng ML, đó là lý do tại sao tất cả các thuật toán học máy trong Scikit-Learn đều được triển khai thông qua API Ước tính. Đối tượng học hỏi từ dữ liệu (phù hợp với dữ liệu) là một bộ ước lượng. Nó có thể được sử dụng với bất kỳ thuật toán nào như phân loại, hồi quy, phân cụm hoặc thậm chí với máy biến áp, trích xuất các tính năng hữu ích từ dữ liệu thô.
Để phù hợp với dữ liệu, tất cả các đối tượng ước tính hiển thị một phương thức phù hợp có tập dữ liệu được hiển thị như sau:
estimator.fit(data)
Tiếp theo, tất cả các tham số của công cụ ước tính có thể được đặt, như sau, khi nó được khởi tạo bởi thuộc tính tương ứng.
estimator = Estimator (param1=1, param2=2)
estimator.param1
Kết quả của phần trên sẽ là 1.
Sau khi dữ liệu được trang bị với công cụ ước tính, các tham số sẽ được ước tính từ dữ liệu hiện có. Bây giờ, tất cả các tham số ước tính sẽ là thuộc tính của đối tượng ước tính kết thúc bằng dấu gạch dưới như sau:
estimator.estimated_param_
Sử dụng API công cụ ước tính
Công dụng chính của công cụ ước tính như sau:
Ước tính và giải mã mô hình
Đối tượng Estimator được sử dụng để ước tính và giải mã một mô hình. Hơn nữa, mô hình được ước tính như một hàm xác định của những điều sau:
Các tham số được cung cấp trong cấu trúc đối tượng.
Trạng thái ngẫu nhiên toàn cục (numpy.random) nếu tham số random_state của công cụ ước tính được đặt thành không.
Mọi dữ liệu được chuyển cho cuộc gọi gần đây nhất tới fit, fit_transform, or fit_predict.
Mọi dữ liệu được chuyển trong một chuỗi lệnh gọi tới partial_fit.
Ánh xạ biểu diễn dữ liệu không phải hình chữ nhật thành dữ liệu hình chữ nhật
Nó ánh xạ một biểu diễn dữ liệu không phải hình chữ nhật thành dữ liệu hình chữ nhật. Nói cách đơn giản, nó lấy đầu vào trong đó mỗi mẫu không được biểu diễn dưới dạng đối tượng dạng mảng có độ dài cố định và tạo ra đối tượng dạng mảng gồm các tính năng cho mỗi mẫu.
Phân biệt giữa mẫu lõi và mẫu bên ngoài
Nó mô hình hóa sự phân biệt giữa các mẫu lõi và mẫu bên ngoài bằng cách sử dụng các phương pháp sau:
fit
fit_p Dự đoán nếu chuyển đổi
dự đoán nếu quy nạp
Nguyên tắc hướng dẫn
Trong khi thiết kế API Scikit-Learn, hãy ghi nhớ các nguyên tắc hướng dẫn -
Tính nhất quán
Nguyên tắc này nói rằng tất cả các đối tượng nên chia sẻ một giao diện chung được vẽ từ một tập hợp các phương thức giới hạn. Tài liệu cũng phải nhất quán.
Hệ thống phân cấp đối tượng hạn chế
Nguyên tắc hướng dẫn này nói:
Các thuật toán phải được biểu diễn bằng các lớp Python
Các tập dữ liệu phải được biểu diễn ở định dạng tiêu chuẩn như mảng NumPy, Pandas DataFrames, ma trận thưa thớt SciPy.
Tên tham số nên sử dụng chuỗi Python tiêu chuẩn.
Thành phần
Như chúng ta đã biết, các thuật toán ML có thể được biểu diễn dưới dạng chuỗi của nhiều thuật toán cơ bản. Scikit-learning sử dụng các thuật toán cơ bản này bất cứ khi nào cần.
Giá trị mặc định hợp lý
Theo nguyên tắc này, thư viện Scikit-learning xác định một giá trị mặc định thích hợp bất cứ khi nào các mô hình ML yêu cầu các tham số do người dùng chỉ định.
Kiểm tra
Theo nguyên tắc hướng dẫn này, mọi giá trị tham số được chỉ định được hiển thị dưới dạng thuộc tính pubic.
Các bước sử dụng API Công cụ ước tính
Tiếp theo là các bước sử dụng API công cụ ước tính Scikit-Learn -
Bước 1: Chọn một loại mô hình
Trong bước đầu tiên này, chúng ta cần chọn một lớp mô hình. Nó có thể được thực hiện bằng cách nhập lớp Công cụ ước tính thích hợp từ Scikit-learning.
Bước 2: Chọn siêu tham số của mô hình
Trong bước này, chúng ta cần chọn siêu tham số của mô hình lớp. Nó có thể được thực hiện bằng cách khởi tạo lớp với các giá trị mong muốn.
Bước 3: Sắp xếp dữ liệu
Tiếp theo, chúng ta cần sắp xếp dữ liệu thành ma trận đặc trưng (X) và vector mục tiêu (y).
Bước 4: Lắp mô hình
Bây giờ, chúng tôi cần điều chỉnh mô hình phù hợp với dữ liệu của bạn. Nó có thể được thực hiện bằng cách gọi phương thức fit () của cá thể mô hình.
Bước 5: Áp dụng mô hình
Sau khi phù hợp với mô hình, chúng tôi có thể áp dụng nó vào dữ liệu mới. Để học có giám sát, hãy sử dụngpredict()phương pháp để dự đoán các nhãn cho dữ liệu chưa biết. Trong khi học tập không có giám sát, hãy sử dụngpredict() hoặc là transform() để suy ra các thuộc tính của dữ liệu.
Ví dụ về học tập có giám sát
Ở đây, như một ví dụ về quy trình này, chúng tôi đang sử dụng trường hợp phổ biến là khớp một dòng với (x, y) dữ liệu tức là simple linear regression.
Đầu tiên, chúng ta cần tải tập dữ liệu, chúng tôi đang sử dụng tập dữ liệu mống mắt -
Thí dụ
import seaborn as sns
iris = sns.load_dataset('iris')
X_iris = iris.drop('species', axis = 1)
X_iris.shape
Đầu ra
(150, 4)
Thí dụ
y_iris = iris['species']
y_iris.shape
Đầu ra
(150,)
Thí dụ
Bây giờ, đối với ví dụ hồi quy này, chúng ta sẽ sử dụng dữ liệu mẫu sau:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.RandomState(35)
x = 10*rng.rand(40)
y = 2*x-1+rng.randn(40)
plt.scatter(x,y);
Đầu ra
Vì vậy, chúng tôi có dữ liệu trên cho ví dụ hồi quy tuyến tính của chúng tôi.
Bây giờ, với dữ liệu này, chúng ta có thể áp dụng các bước nêu trên.
Chọn một loại mô hình
Ở đây, để tính toán một mô hình hồi quy tuyến tính đơn giản, chúng ta cần nhập lớp hồi quy tuyến tính như sau:
from sklearn.linear_model import LinearRegression
Chọn siêu tham số của mô hình
Khi chúng ta chọn một lớp mô hình, chúng ta cần thực hiện một số lựa chọn quan trọng thường được biểu diễn dưới dạng siêu tham số hoặc các tham số phải đặt trước khi mô hình phù hợp với dữ liệu. Ở đây, đối với ví dụ này về hồi quy tuyến tính, chúng tôi muốn điều chỉnh hệ số chặn bằng cách sử dụngfit_intercept siêu tham số như sau -
Example
model = LinearRegression(fit_intercept = True)
model
Output
LinearRegression(copy_X = True, fit_intercept = True, n_jobs = None, normalize = False)
Sắp xếp dữ liệu
Bây giờ, như chúng ta biết rằng biến mục tiêu của chúng ta y ở dạng đúng nghĩa là một chiều dài n_samplesmảng 1-D. Tuy nhiên, chúng ta cần định hình lại ma trận tính năngX để biến nó thành một ma trận có kích thước [n_samples, n_features]. Nó có thể được thực hiện như sau:
Example
X = x[:, np.newaxis]
X.shape
Output
(40, 1)
Phù hợp mô hình
Một khi chúng ta sắp xếp dữ liệu thì đã đến lúc phù hợp với mô hình tức là áp dụng mô hình của chúng ta vào dữ liệu. Điều này có thể được thực hiện với sự trợ giúp củafit() phương pháp như sau -
Example
model.fit(X, y)
Output
LinearRegression(copy_X = True, fit_intercept = True, n_jobs = None,normalize = False)
Trong Scikit-learning, fit() quy trình có một số dấu gạch dưới ở cuối.
Đối với ví dụ này, tham số dưới đây cho thấy độ dốc của sự phù hợp tuyến tính đơn giản của dữ liệu:
Example
model.coef_
Output
array([1.99839352])
Tham số dưới đây đại diện cho điểm chặn của sự phù hợp tuyến tính đơn giản với dữ liệu -
Example
model.intercept_
Output
-0.9895459457775022
Áp dụng mô hình cho dữ liệu mới
Sau khi đào tạo mô hình, chúng tôi có thể áp dụng nó vào dữ liệu mới. Vì nhiệm vụ chính của học máy có giám sát là đánh giá mô hình dựa trên dữ liệu mới không phải là một phần của tập huấn luyện. Nó có thể được thực hiện với sự giúp đỡ củapredict() phương pháp như sau -
Example
xfit = np.linspace(-1, 11)
Xfit = xfit[:, np.newaxis]
yfit = model.predict(Xfit)
plt.scatter(x, y)
plt.plot(xfit, yfit);
Output
Hoàn thành ví dụ làm việc / thực thi
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
iris = sns.load_dataset('iris')
X_iris = iris.drop('species', axis = 1)
X_iris.shape
y_iris = iris['species']
y_iris.shape
rng = np.random.RandomState(35)
x = 10*rng.rand(40)
y = 2*x-1+rng.randn(40)
plt.scatter(x,y);
from sklearn.linear_model import LinearRegression
model = LinearRegression(fit_intercept=True)
model
X = x[:, np.newaxis]
X.shape
model.fit(X, y)
model.coef_
model.intercept_
xfit = np.linspace(-1, 11)
Xfit = xfit[:, np.newaxis]
yfit = model.predict(Xfit)
plt.scatter(x, y)
plt.plot(xfit, yfit);
Ví dụ về học tập không giám sát
Ở đây, như một ví dụ về quy trình này, chúng tôi đang sử dụng trường hợp phổ biến là giảm kích thước của tập dữ liệu Iris để chúng ta có thể hình dung nó dễ dàng hơn. Đối với ví dụ này, chúng tôi sẽ sử dụng phân tích thành phần chính (PCA), một kỹ thuật giảm kích thước tuyến tính nhanh.
Giống như ví dụ đã cho ở trên, chúng ta có thể tải và vẽ biểu đồ dữ liệu ngẫu nhiên từ tập dữ liệu mống mắt. Sau đó, chúng ta có thể làm theo các bước như sau:
Chọn một loại mô hình
from sklearn.decomposition import PCA
Chọn siêu tham số của mô hình
Example
model = PCA(n_components=2)
model
Output
PCA(copy = True, iterated_power = 'auto', n_components = 2, random_state = None,
svd_solver = 'auto', tol = 0.0, whiten = False)
Phù hợp mô hình
Example
model.fit(X_iris)
Output
PCA(copy = True, iterated_power = 'auto', n_components = 2, random_state = None,
svd_solver = 'auto', tol = 0.0, whiten = False)
Chuyển đổi dữ liệu sang hai chiều
Example
X_2D = model.transform(X_iris)
Bây giờ, chúng ta có thể vẽ biểu đồ kết quả như sau:
Output
iris['PCA1'] = X_2D[:, 0]
iris['PCA2'] = X_2D[:, 1]
sns.lmplot("PCA1", "PCA2", hue = 'species', data = iris, fit_reg = False);
Output
Hoàn thành ví dụ làm việc / thực thi
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
iris = sns.load_dataset('iris')
X_iris = iris.drop('species', axis = 1)
X_iris.shape
y_iris = iris['species']
y_iris.shape
rng = np.random.RandomState(35)
x = 10*rng.rand(40)
y = 2*x-1+rng.randn(40)
plt.scatter(x,y);
from sklearn.decomposition import PCA
model = PCA(n_components=2)
model
model.fit(X_iris)
X_2D = model.transform(X_iris)
iris['PCA1'] = X_2D[:, 0]
iris['PCA2'] = X_2D[:, 1]
sns.lmplot("PCA1", "PCA2", hue='species', data=iris, fit_reg=False);