Giá trị siêu tham số

Tinh chỉnh siêu tham số trong Python

Alex Scriven

Data Scientist

Giá trị siêu tham số

 

Một số siêu tham số đáng ưu tiên tinh chỉnh hơn.

Nhưng nên thử các giá trị nào cho siêu tham số?

  • Phụ thuộc từng thuật toán và siêu tham số
  • Có một số hướng dẫn và mẹo thực hành tốt

Cùng xem vài mẹo hàng đầu!

Tinh chỉnh siêu tham số trong Python

Siêu tham số mâu thuẫn

Lưu ý các lựa chọn siêu tham số mâu thuẫn.

  • LogisticRegression() có các tùy chọn solverpenalty có thể xung đột.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

Một số không nêu rõ mà sẽ “bỏ qua” (ví dụ ElasticNet với siêu tham số normalize):

This parameter is ignored when fit_intercept is set to False

Hãy tham khảo tài liệu Scikit-learn!

Tinh chỉnh siêu tham số trong Python

Giá trị siêu tham số ngớ ngẩn

 

Tránh đặt giá trị “ngớ ngẩn” cho các thuật toán:

  • Rừng ngẫu nhiên với quá ít cây
    • Gọi là “rừng” nếu chỉ có 2 cây?
  • 1 láng giềng trong KNN
    • Bình quân “phiếu” của một người không vững!
  • Tăng siêu tham số với bước quá nhỏ

Ghi chép các giá trị hợp lý cho siêu tham số là rất hữu ích.

Tinh chỉnh siêu tham số trong Python

Tự động chọn siêu tham số

 

Ở bài trước, ta xây dựng các mô hình:

knn_5 =  KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20  = KNeighborsClassifier(n_neighbors=20)

Cách này kém hiệu quả. Có thể làm tốt hơn không?

Tinh chỉnh siêu tham số trong Python

Tự động tinh chỉnh siêu tham số

Dùng vòng lặp for để duyệt các lựa chọn:

neighbors_list = [3,5,10,20,50,75]

accuracy_list = []
for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test)
accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy)
Tinh chỉnh siêu tham số trong Python

Tự động tinh chỉnh siêu tham số

Ta có thể lưu kết quả vào DataFrame để xem:

results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

Độ chính xác theo số láng giềng

Tinh chỉnh siêu tham số trong Python

Đường học tập

Hãy tạo đồ thị đường học tập

Lần này sẽ thử nhiều giá trị hơn

neighbors_list = list(range(5,500, 5))

accuracy_list = [] for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test) accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy) results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
Tinh chỉnh siêu tham số trong Python

Đường học tập

Ta có thể vẽ DataFrame lớn hơn:

plt.plot(results_df['neighbors'], 
    results_df['accuracy'])

# Thêm nhãn và tiêu đề plt.gca().set(xlabel='n_neighbors', ylabel='Accuracy', title='Accuracy for different n_neighbors') plt.show()
Tinh chỉnh siêu tham số trong Python

Đường học tập

Đồ thị của chúng ta:

độ chính xác so với số láng giềng cho đường học tập KNN

Tinh chỉnh siêu tham số trong Python

Mẹo tạo dãy giá trị

Hàm range của Python không hỗ trợ bước thập phân.

Một mẹo tiện dùng NumPy np.linspace(start, end, num)

  • Tạo num giá trị cách đều trong khoảng (start, end) bạn chỉ định.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Tinh chỉnh siêu tham số trong Python

Ayo berlatih!

Tinh chỉnh siêu tham số trong Python

Preparing Video For Download...