Scikit Learn - Stochastic Gradient Descent
Ở đây, chúng ta sẽ tìm hiểu về một thuật toán tối ưu hóa trong Sklearn, được gọi là Stochastic Gradient Descent (SGD).
Stochastic Gradient Descent (SGD) là một thuật toán tối ưu hóa đơn giản nhưng hiệu quả được sử dụng để tìm các giá trị của tham số / hệ số của các hàm giúp giảm thiểu hàm chi phí. Nói cách khác, nó được sử dụng để học phân biệt các bộ phân loại tuyến tính dưới các hàm mất lồi như hồi quy SVM và Logistic. Nó đã được áp dụng thành công cho các tập dữ liệu quy mô lớn bởi vì việc cập nhật các hệ số được thực hiện cho mỗi phiên bản huấn luyện, thay vì ở cuối các phiên bản.
Bộ phân loại SGD
Bộ phân loại Stochastic Gradient Descent (SGD) về cơ bản thực hiện một quy trình học tập SGD đơn giản hỗ trợ các chức năng và hình phạt mất mát khác nhau để phân loại. Scikit-learning cung cấpSGDClassifier phân hệ thực hiện phân loại SGD.
Thông số
Bảng theo dõi bao gồm các thông số được sử dụng bởi SGDClassifier mô-đun -
Sr.No | Mô tả về Thông Số |
---|---|
1 | loss - str, default = 'bản lề' Nó đại diện cho hàm mất mát được sử dụng trong khi thực hiện. Giá trị mặc định là 'bản lề' sẽ cung cấp cho chúng ta một SVM tuyến tính. Các tùy chọn khác có thể được sử dụng là -
|
2 | penalty - str, 'none', 'l2', 'l1','asticnet ' Nó là thuật ngữ chính quy được sử dụng trong mô hình. Theo mặc định, nó là L2. Chúng ta có thể sử dụng L1 hoặc'asticnet; nhưng cả hai đều có thể mang lại sự thưa thớt cho mô hình, do đó không thể đạt được với L2. |
3 | alpha - float, default = 0,0001 Alpha, hằng số nhân với thuật ngữ chính quy, là tham số điều chỉnh quyết định mức độ chúng ta muốn phạt mô hình. Giá trị mặc định là 0,0001. |
4 | l1_ratio - float, mặc định = 0.15 Đây được gọi là tham số trộn ElasticNet. Phạm vi của nó là 0 <= l1_ratio <= 1. Nếu l1_ratio = 1, hình phạt sẽ là hình phạt L1. Nếu l1_ratio = 0, hình phạt sẽ là hình phạt L2. |
5 | fit_intercept - Boolean, Mặc định = Đúng Tham số này chỉ định rằng một hằng số (thiên vị hoặc chặn) phải được thêm vào hàm quyết định. Không có điểm chặn nào sẽ được sử dụng trong tính toán và dữ liệu sẽ được giả định là đã được căn giữa, nếu nó sẽ được đặt thành false. |
6 | tol - float hoặc none, tùy chọn, default = 1.e-3 Tham số này thể hiện tiêu chí dừng cho các lần lặp. Giá trị mặc định của nó là Sai nhưng nếu được đặt thành Không, các lần lặp sẽ dừng lại khiloss > best_loss - tol for n_iter_no_changecác kỷ nguyên kế tiếp nhau. |
7 | shuffle - Boolean, tùy chọn, mặc định = True Tham số này thể hiện rằng chúng ta có muốn dữ liệu đào tạo của mình được xáo trộn sau mỗi kỷ nguyên hay không. |
số 8 | verbose - số nguyên, mặc định = 0 Nó thể hiện mức độ chi tiết. Giá trị mặc định của nó là 0. |
9 | epsilon - float, default = 0,1 Tham số này chỉ định độ rộng của vùng không nhạy cảm. Nếu loss = 'epsilon-insensitive', bất kỳ sự khác biệt nào, giữa dự đoán hiện tại và nhãn chính xác, nhỏ hơn ngưỡng sẽ bị bỏ qua. |
10 | max_iter - int, tùy chọn, mặc định = 1000 Như tên gợi ý, nó đại diện cho số lần vượt qua tối đa trong các kỷ nguyên tức là dữ liệu đào tạo. |
11 | warm_start - bool, tùy chọn, mặc định = false Với tham số này được đặt thành True, chúng ta có thể sử dụng lại giải pháp của cuộc gọi trước đó để phù hợp với vai trò khởi tạo. Nếu chúng ta chọn default tức là false, nó sẽ xóa giải pháp trước đó. |
12 | random_state - int, RandomState instance hoặc None, tùy chọn, default = none Tham số này đại diện cho hạt giống của số ngẫu nhiên giả được tạo ra được sử dụng trong khi xáo trộn dữ liệu. Tiếp theo là các tùy chọn.
|
13 | n_jobs - int hoặc none, tùy chọn, Mặc định = Không có Nó đại diện cho số lượng CPU được sử dụng trong tính toán OVA (Một so với tất cả), cho các bài toán nhiều lớp. Giá trị mặc định không có nghĩa là 1. |
14 | learning_rate - chuỗi, tùy chọn, mặc định = 'tối ưu'
|
15 | eta0 - gấp đôi, mặc định = 0,0 Nó đại diện cho tốc độ học ban đầu cho các tùy chọn tốc độ học tập đã đề cập ở trên, tức là 'không đổi', 'gọi điện' hoặc 'thích ứng'. |
16 | power_t - idouble, mặc định = 0,5 Nó là số mũ cho tỷ lệ học tập 'incscalling'. |
17 | early_stopping - bool, mặc định = Sai Tham số này thể hiện việc sử dụng tính năng dừng sớm để kết thúc đào tạo khi điểm xác nhận không được cải thiện. Giá trị mặc định của nó là false nhưng khi được đặt thành true, nó sẽ tự động dành một phần dữ liệu huấn luyện được phân tầng để xác thực và dừng huấn luyện khi điểm xác thực không cải thiện. |
18 | validation_fraction - float, default = 0,1 Nó chỉ được sử dụng khi early_stopping là true. Nó đại diện cho tỷ lệ dữ liệu đào tạo để đặt phụ trợ làm bộ xác nhận để kết thúc sớm dữ liệu đào tạo .. |
19 | n_iter_no_change - int, default = 5 Nó đại diện cho số lần lặp lại không có cải tiến nên thuật toán chạy trước khi dừng sớm. |
20 | classs_weight - dict, {class_label: weight} hoặc "balance", hoặc Không, tùy chọn Tham số này đại diện cho trọng số liên quan đến các lớp. Nếu không được cung cấp, các lớp phải có trọng số 1. |
20 | warm_start - bool, tùy chọn, mặc định = false Với tham số này được đặt thành True, chúng ta có thể sử dụng lại giải pháp của cuộc gọi trước đó để phù hợp với vai trò khởi tạo. Nếu chúng ta chọn default tức là false, nó sẽ xóa giải pháp trước đó. |
21 | average - iBoolean hoặc int, tùy chọn, default = false Nó đại diện cho số lượng CPU được sử dụng trong tính toán OVA (Một so với tất cả), cho các bài toán nhiều lớp. Giá trị mặc định không có nghĩa là 1. |
Thuộc tính
Bảng sau bao gồm các thuộc tính được sử dụng bởi SGDClassifier mô-đun -
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | coef_ - mảng, hình dạng (1, n_features) if n_classes == 2, else (n_classes, n_features) Thuộc tính này cung cấp trọng lượng được gán cho các đối tượng địa lý. |
2 | intercept_ - mảng, hình dạng (1,) if n_classes == 2, else (n_classes,) Nó thể hiện thuật ngữ độc lập trong chức năng quyết định. |
3 | n_iter_ - int Nó cung cấp số lần lặp lại để đạt được tiêu chí dừng. |
Implementation Example
Giống như các bộ phân loại khác, Stochastic Gradient Descent (SGD) phải được trang bị với hai mảng sau:
Một mảng X chứa các mẫu huấn luyện. Nó có kích thước [n_samples, n_features].
Một mảng Y chứa các giá trị đích, tức là nhãn lớp cho các mẫu huấn luyện. Nó có kích thước [n_samples].
Example
Tập lệnh Python sau sử dụng mô hình tuyến tính SGDClassifier -
import numpy as np
from sklearn import linear_model
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
Y = np.array([1, 1, 2, 2])
SGDClf = linear_model.SGDClassifier(max_iter = 1000, tol=1e-3,penalty = "elasticnet")
SGDClf.fit(X, Y)
Output
SGDClassifier(
alpha = 0.0001, average = False, class_weight = None,
early_stopping = False, epsilon = 0.1, eta0 = 0.0, fit_intercept = True,
l1_ratio = 0.15, learning_rate = 'optimal', loss = 'hinge', max_iter = 1000,
n_iter = None, n_iter_no_change = 5, n_jobs = None, penalty = 'elasticnet',
power_t = 0.5, random_state = None, shuffle = True, tol = 0.001,
validation_fraction = 0.1, verbose = 0, warm_start = False
)
Example
Bây giờ, sau khi được trang bị, mô hình có thể dự đoán các giá trị mới như sau:
SGDClf.predict([[2.,2.]])
Output
array([2])
Example
Đối với ví dụ trên, chúng ta có thể lấy vector trọng số với sự trợ giúp của tập lệnh python sau:
SGDClf.coef_
Output
array([[19.54811198, 9.77200712]])
Example
Tương tự, chúng ta có thể lấy giá trị của intercept với sự trợ giúp của tập lệnh python sau:
SGDClf.intercept_
Output
array([10.])
Example
Chúng ta có thể nhận được khoảng cách đã ký đến siêu phẳng bằng cách sử dụng SGDClassifier.decision_function như được sử dụng trong tập lệnh python sau:
SGDClf.decision_function([[2., 2.]])
Output
array([68.6402382])
Bộ điều chỉnh SGD
Bộ hồi quy Stochastic Gradient Descent (SGD) về cơ bản thực hiện một quy trình học SGD đơn giản hỗ trợ các hàm và hình phạt mất mát khác nhau để phù hợp với các mô hình hồi quy tuyến tính. Scikit-learning cung cấpSGDRegressor mô-đun thực hiện hồi quy SGD.
Thông số
Các thông số được sử dụng bởi SGDRegressorgần giống như được sử dụng trong mô-đun SGDClassifier. Sự khác biệt nằm ở thông số 'mất mát'. Đối vớiSGDRegressor tham số mất mát của mô-đun các giá trị tích cực như sau:
squared_loss - Nó đề cập đến sự phù hợp với hình vuông nhỏ nhất thông thường.
huber: SGDRegressor- sửa các giá trị ngoại lệ bằng cách chuyển từ tổn thất bình phương sang tuyến tính trong khoảng cách epsilon. Công việc của 'huber' là sửa đổi 'squared_loss' để thuật toán tập trung ít hơn vào việc sửa chữa các ngoại lệ.
epsilon_insensitive - Trên thực tế, nó bỏ qua các lỗi ít hơn epsilon.
squared_epsilon_insensitive- Nó giống như epsilon_insensitive. Sự khác biệt duy nhất là nó trở thành tổn thất bình phương vượt qua mức dung sai epsilon.
Một điểm khác biệt nữa là tham số có tên 'power_t' có giá trị mặc định là 0,25 thay vì 0,5 như trong SGDClassifier. Hơn nữa, nó không có các tham số 'class_weight' và 'n_jobs'.
Thuộc tính
Các thuộc tính của SGDRegressor cũng giống như thuộc tính của mô-đun SGDClassifier. Đúng hơn nó có ba thuộc tính bổ sung như sau:
average_coef_ - mảng, hình dạng (n_features,)
Như tên gợi ý, nó cung cấp trọng lượng trung bình được gán cho các tính năng.
average_intercept_ - mảng, hình dạng (1,)
Như tên gợi ý, nó cung cấp thuật ngữ đánh chặn trung bình.
t_ - int
Nó cung cấp số lần cập nhật trọng lượng được thực hiện trong giai đoạn đào tạo.
Note - các thuộc tính average_coef_ và average_intercept_ sẽ hoạt động sau khi bật tham số 'average' thành True.
Implementation Example
Sử dụng script Python sau SGDRegressor mô hình tuyến tính -
import numpy as np
from sklearn import linear_model
n_samples, n_features = 10, 5
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
X = rng.randn(n_samples, n_features)
SGDReg =linear_model.SGDRegressor(
max_iter = 1000,penalty = "elasticnet",loss = 'huber',tol = 1e-3, average = True
)
SGDReg.fit(X, y)
Output
SGDRegressor(
alpha = 0.0001, average = True, early_stopping = False, epsilon = 0.1,
eta0 = 0.01, fit_intercept = True, l1_ratio = 0.15,
learning_rate = 'invscaling', loss = 'huber', max_iter = 1000,
n_iter = None, n_iter_no_change = 5, penalty = 'elasticnet', power_t = 0.25,
random_state = None, shuffle = True, tol = 0.001, validation_fraction = 0.1,
verbose = 0, warm_start = False
)
Example
Bây giờ, sau khi được trang bị, chúng ta có thể lấy vector trọng lượng với sự trợ giúp của tập lệnh python sau:
SGDReg.coef_
Output
array([-0.00423314, 0.00362922, -0.00380136, 0.00585455, 0.00396787])
Example
Tương tự, chúng ta có thể lấy giá trị của intercept với sự trợ giúp của tập lệnh python sau:
SGReg.intercept_
Output
SGReg.intercept_
Example
Chúng tôi có thể nhận được số lần cập nhật trọng lượng trong giai đoạn đào tạo với sự trợ giúp của tập lệnh python sau:
SGDReg.t_
Output
61.0
Ưu và nhược điểm của SGD
Theo những ưu điểm của SGD -
Stochastic Gradient Descent (SGD) rất hiệu quả.
Nó rất dễ thực hiện vì có rất nhiều cơ hội để điều chỉnh mã.
Theo nhược điểm của SGD -
Stochastic Gradient Descent (SGD) yêu cầu một số siêu tham số như các tham số chính quy.
Nó nhạy cảm với việc mở rộng tính năng.