Học máy - Tìm kiếm lưới
Trên trang này, W3schools.com hợp tác với Học viện Khoa học Dữ liệu NYC để cung cấp nội dung đào tạo kỹ thuật số cho sinh viên của chúng tôi.
Tìm kiếm lưới
Phần lớn các mô hình học máy chứa các tham số có thể được điều chỉnh để thay đổi cách mô hình học. Ví dụ: mô hình hồi quy logistic, từ sklearn
, có tham số C
kiểm soát việc chính quy hóa, ảnh hưởng đến độ phức tạp của mô hình.
Làm cách nào để chúng tôi chọn giá trị tốt nhất cho C
? Giá trị tốt nhất phụ thuộc vào dữ liệu được sử dụng để huấn luyện mô hình.
Làm thế nào nó hoạt động?
Một phương pháp là thử các giá trị khác nhau rồi chọn giá trị cho điểm cao nhất. Kỹ thuật này được gọi là tìm kiếm lưới . Nếu chúng tôi phải chọn các giá trị cho hai tham số trở lên, chúng tôi sẽ đánh giá tất cả các kết hợp của các bộ giá trị, từ đó tạo thành một lưới các giá trị.
Trước khi đi vào ví dụ, điều tốt là bạn nên biết tham số chúng ta đang thay đổi có tác dụng gì. Giá trị C
cao hơn cho biết mô hình rằng dữ liệu huấn luyện giống với thông tin trong thế giới thực, đặt trọng số lớn hơn vào dữ liệu huấn luyện. Trong khi giá trị thấp hơn của C
thì ngược lại.
Sử dụng tham số mặc định
Trước tiên, hãy xem loại kết quả nào chúng tôi có thể tạo ra mà không cần tìm kiếm dạng lưới chỉ sử dụng các tham số cơ bản.
Để bắt đầu, trước tiên chúng ta phải tải tập dữ liệu mà chúng ta sẽ làm việc.
from sklearn import datasets
iris = datasets.load_iris()
Tiếp theo để tạo mô hình chúng ta phải có một tập các biến độc lập X và một biến phụ thuộc y.
X = iris['data']
y = iris['target']
Bây giờ chúng ta sẽ tải mô hình logistic để phân loại hoa diên vĩ.
from sklearn.linear_model import LogisticRegression
Tạo mô hình, đặt max_iter thành giá trị cao hơn để đảm bảo mô hình tìm thấy kết quả.
Hãy nhớ giá trị mặc định của C
trong mô hình hồi quy logistic là 1
, chúng ta sẽ so sánh giá trị này sau.
Trong ví dụ bên dưới, chúng tôi xem tập dữ liệu iris và cố gắng huấn luyện một mô hình với các giá trị khác nhau cho C
trong hồi quy logistic.
logit = LogisticRegression(max_iter = 10000)
Sau khi tạo mô hình, chúng ta phải điều chỉnh mô hình phù hợp với dữ liệu.
print(logit.fit(X,y))
Để đánh giá mô hình, chúng tôi chạy phương pháp tính điểm.
print(logit.score(X,y))
Ví dụ
from sklearn import datasets
from sklearn.linear_model import
LogisticRegression
iris = datasets.load_iris()
X = iris['data']
y = iris['target']
logit = LogisticRegression(max_iter = 10000)
print(logit.fit(X,y))
print(logit.score(X,y))
Chạy ví dụ » Với cài đặt mặc định là C = 1
, chúng tôi đạt được số điểm là 0.973
.
Hãy xem liệu chúng ta có thể làm tốt hơn bằng cách triển khai tìm kiếm dạng lưới với các giá trị chênh lệch là 0,973 hay không.
QUẢNG CÁO
Triển khai tìm kiếm lưới
Chúng tôi sẽ làm theo các bước tương tự như trước ngoại trừ lần này chúng tôi sẽ đặt một phạm vi giá trị cho C
.
Việc biết giá trị nào cần đặt cho tham số tìm kiếm sẽ cần sự kết hợp giữa kiến thức và thực hành về miền.
Vì giá trị mặc định của C
là 1
nên chúng ta sẽ đặt một phạm vi giá trị xung quanh nó.
C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
Tiếp theo, chúng ta sẽ tạo một vòng lặp for để thay đổi các giá trị của C
và đánh giá mô hình sau mỗi thay đổi.
Đầu tiên chúng ta sẽ tạo một danh sách trống để lưu trữ điểm bên trong.
scores = []
Để thay đổi giá trị của C
chúng ta phải lặp qua phạm vi giá trị và cập nhật tham số mỗi lần.
for choice in C:
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))
Với điểm số được lưu trữ trong một danh sách, chúng ta có thể đánh giá đâu là lựa chọn tốt nhất của C
print(scores)
Ví dụ
from sklearn import datasets
from sklearn.linear_model import
LogisticRegression
iris = datasets.load_iris()
X = iris['data']
y = iris['target']
logit = LogisticRegression(max_iter = 10000)
C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]
scores = []
for choice in C:
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))
print(scores)
Chạy ví dụ »Kết quả được giải thích
Chúng ta có thể thấy rằng các giá trị thấp hơn của C
hoạt động kém hơn tham số cơ bản là 1
. Tuy nhiên, khi chúng tôi tăng giá trị C
lên 1.75
thì mô hình có độ chính xác tăng lên.
Có vẻ như việc tăng C
vượt quá mức này không giúp tăng độ chính xác của mô hình.
Lưu ý về các phương pháp hay nhất
Chúng tôi đã chấm điểm mô hình hồi quy logistic của mình bằng cách sử dụng cùng một dữ liệu đã được sử dụng để huấn luyện nó. Nếu mô hình tương ứng quá chặt chẽ với dữ liệu đó, nó có thể không hiệu quả trong việc dự đoán dữ liệu không nhìn thấy được. Lỗi thống kê này được gọi là quá phù hợp .
Để tránh bị đánh lừa bởi điểm số trên dữ liệu huấn luyện, chúng ta có thể dành một phần dữ liệu của mình và sử dụng nó cụ thể cho mục đích thử nghiệm mô hình. Tham khảo bài giảng về chia tách train/test để tránh bị nhầm lẫn và trang bị quá mức.