Cách chọn số lượng công cụ ước tính cho Tăng cường độ dốc

Trong Khoa học dữ liệu, ngày nay có rất nhiều thuật toán để sử dụng. Do đó, một kỹ thuật hữu ích là sử dụng kết hợp chúng trong một mô hình duy nhất để tận dụng tối đa từng mô hình, từ đó tạo ra một mô hình chính xác hơn.

Sử dụng Scikit-Learn, bạn sẽ tìm thấy thuật toán Rừng ngẫu nhiên, đây là loại đóng gói của mô hình tập hợp. Mặt khác, bạn cũng sẽ tìm thấy các mô hình Tăng cường đào tạo các công cụ ước tính theo trình tự, trong đó kết quả của một mô hình được chuyển sang mô hình tiếp theo sẽ cố gắng cải thiện các dự đoán cho đến khi chúng đạt được kết quả tối ưu.

Khi tạo công cụ ước tính Tăng cường độ dốc, bạn sẽ tìm thấy siêu tham số này n_estimator=100 với giá trị mặc định là 100 cây sẽ được tạo để có kết quả. Nhiều khi, chúng tôi chỉ đặt giá trị này thành mặc định hoặc có thể tăng lên khi cần, thậm chí sử dụng kỹ thuật Tìm kiếm lưới.

Trong bài đăng này, chúng ta sẽ tìm ra một cách đơn giản để lấy một số duy nhất dùng để huấn luyện mô hình của chúng ta.

Tăng cường độ dốc có thể được tải từ Scikit-Learn bằng lớp này from sklearn.ensemble import GradientBoostingRegressor. Thuật toán Tăng cường độ dốc có thể được sử dụng để phân loại hoặc cho các mô hình hồi quy. Nó là một công cụ ước tính dựa trên Cây - nghĩa là nó bao gồm nhiều cây quyết định.

Kết quả của Cây 1 sẽ tạo ra lỗi. Những lỗi đó sẽ được sử dụng và đầu vào cho Cây 2. Một lần nữa, các lỗi của mô hình cuối cùng sẽ được sử dụng và đầu vào của mô hình tiếp theo cho đến khi đạt được n_estimators giá trị.

Mỗi mô hình sẽ phù hợp với các lỗi của mô hình trước đó. Hình ảnh của tác giả.

Vì mỗi công cụ ước tính sẽ khớp với sai số của công cụ ước tính trước đó nên kỳ vọng là sự kết hợp của các dự đoán sẽ tốt hơn bất kỳ công cụ ước tính nào. Mặt khác, sau mỗi lần lặp lại, chúng tôi đang làm cho mô hình trở nên phức tạp hơn, giảm độ lệch nhưng lại tăng phương sai. Vì vậy chúng ta phải biết khi nào nên dừng lại.

Hãy xem làm thế nào để làm điều đó bây giờ.

Mã cho bài tập này rất đơn giản. Tất cả những gì chúng ta phải làm là lặp lại sau mỗi lần lặp và kiểm tra xem chúng ta có lỗi thấp nhất ở lần lặp nào.

Hãy bắt đầu bằng cách chọn một tập dữ liệu. Chúng tôi sẽ sử dụng tai nạn xe hơi tập dữ liệu, có nguồn gốc từ thư viện seaborn (vì vậy dữ liệu mở theo giấy phép BDS).

# Tập dữ liệu
df = sns.load_dataset('car_crashes')

Dưới đây là một cái nhìn nhanh về dữ liệu. Chúng tôi sẽ cố gắng ước tính total lượng bằng cách sử dụng các tính năng khác làm công cụ dự đoán. Vì đây là đầu ra số thực nên chúng ta đang nói về mô hình hồi quy.

Tập dữ liệu về tai nạn ô tô, từ biển. Hình ảnh của tác giả.

Nhanh chóng nhìn vào các mối tương quan.

# Mối tương quan
df.corr().style.background_gradient(cmap='coolwarm')
Các mối tương quan trong tập dữ liệu. Hình ảnh của tác giả.

Được rồi, không có hiện tượng đa cộng tuyến lớn. Chúng tôi có thể thấy điều đó ins_premiumins_losses không tương quan tốt lắm với total , vì vậy chúng tôi sẽ không xem xét chúng trong mô hình.

Nếu chúng tôi kiểm tra dữ liệu bị thiếu thì không có dữ liệu nào

# Mất tích
df.isnull (). sum ()
0

Tốt lắm, vậy hãy chia dữ liệu ngay bây giờ.

# X và y
X = df.drop(['ins_premium', 'ins_losses', 'abbrev', 'total'], axis=1)
y = df['tổng']
#thử tàu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, Random_state=22)

Chúng ta có thể tạo một đường ống để chia tỷ lệ dữ liệu và mô hình hóa nó (thực sự không cần thiết phải chia tỷ lệ dữ liệu này vì chúng đã có cùng tỷ lệ, trên cơ sở hàng chục). Tiếp theo, chúng tôi điều chỉnh dữ liệu cho mô hình và dự đoán kết quả.

Tôi đang sử dụng 500 công cụ ước tính với learning_rate của 0.3.

Tốc độ học là kích thước của bước chúng ta thực hiện để đạt được lỗi tối thiểu. Nếu chúng tôi sử dụng giá trị quá cao, chúng tôi có thể vượt qua mức tối thiểu. Nếu chúng ta sử dụng một con số quá nhỏ, chúng ta thậm chí có thể không đạt được gần đến nó. Vì vậy, một nguyên tắc nhỏ bạn có thể cân nhắc là: nếu bạn có nhiều công cụ ước tính, bạn có thể sử dụng các giá trị tốc độ học thấp hơn. Nếu bạn chỉ có một vài công cụ ước tính, hãy ưu tiên sử dụng các giá trị tốc độ học cao hơn.

các bước = [('scale', StandardScaler()),
('GBR', gradientBoostingRegressor(n_estimators=500, learning_rate=0.03)) ]
# Đường ống sơ thẩm và sự phù hợp
pipe = Pipeline(steps).fit(X_train, y_train)
# Dự đoán
preds = pipe.predict(X_test)

Bây giờ, đánh giá.

# RMSE của dự đoán
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds)),1 )}')
[OUT]: RMSE: 1.1# Giá trị trung bình của giá trị Y thực
print(f'Data y có nghĩa là: {round( y.mean(),1 )}')
[OUT]: Ý nghĩa dữ liệu: 15.8

Tốt. RMSE của chúng tôi là khoảng 6.9% giá trị trung bình. Vì vậy, tính trung bình thì chúng ta đang chênh lệch nhiều như vậy.

Bây giờ, hãy kiểm tra cách điều chỉnh mô hình của chúng tôi bằng cách chọn số lượng công cụ ước tính tối ưu để huấn luyện sẽ mang lại cho chúng tôi tỷ lệ lỗi thấp nhất.

Như tôi đã nói, chúng tôi thực sự không cần phải chia tỷ lệ dữ liệu này vì nó đã có cùng tỷ lệ. Vì vậy, hãy phù hợp với mô hình.

#Mô hình
gbr = gradientBoostingRegressor(n_estimators=500, learning_rate=0.3).fit(X_train, y_train)

Bây giờ nó là thứ tốt. Có một phương pháp trong Tăng cường độ dốc cho phép chúng ta lặp lại các dự đoán của từng công cụ ước tính đã được đào tạo, từ 1 đến 500. Vì vậy, chúng ta sẽ tạo một vòng lặp đi qua 500 công cụ ước tính trong gbr mô hình, dự đoán kết quả bằng phương pháp staged_predict(), tính sai số bình phương trung bình và lưu kết quả vào danh sách errors.

# Lặp lại số tốt nhất
lỗi = [ Mean_squared_error(y_test, preds) cho các dự đoán trong gbr.staged_predict(X_test)]
# Số lượng ước tính tối ưu
tối ưu_num_estimators = np.argmin(lỗi) + 1

Tiếp theo, chúng ta có thể vẽ kết quả.

#Kịch bản
g=sns.lineplot(x=range(500), y=errors)
g.set_title(f'Số lượng công cụ ước tính tốt nhất tại {best_n_estimators}', size=15);
Số lượng ước tính tốt nhất. Hình ảnh của tác giả.

Chúng tôi thấy rằng tỷ lệ lỗi thấp nhất là với 34 công cụ ước tính. Vì vậy, hãy đào tạo lại mô hình của chúng tôi với 34 công cụ ước tính và so sánh với kết quả từ mô hình được đào tạo bằng đường ống.

# Đào tạo lại
gbr = gradientBoostingRegressor(n_estimators=34, learning_rate=0.3).fit(X_train, y_train)
# Phỏng đoán
preds2 = gbr.predict(X_test)

Đang đánh giá…

# RMSE của dự đoán
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds2)),1 )}')
[OUT]: RMSE: 1.0
# Ý nghĩa dữ liệu Y
print(f'Data y có nghĩa là: {round( y.mean(),1 )}')
[OUT]: Ý nghĩa dữ liệu: 15.8

Hiện tại chúng tôi đã giảm từ 6.9% xuống còn 6.3%. Xấp xỉ. Tốt hơn 9%. Hãy xem xét một vài dự đoán.

Dự đoán từ cả hai mô hình Hình ảnh của tác giả.

Kết quả thú vị. Một số dự đoán của mô hình thứ hai tốt hơn mô hình thứ nhất.

Chúng tôi đã học cách xác định số lượng công cụ ước tính tốt nhất để điều chỉnh một GradientBoostingRegressor từ Scikit-Learn. Đây là một siêu tham số có thể tạo ra sự khác biệt trong loại mô hình tập hợp này, giúp đào tạo các công cụ ước tính theo trình tự.

Đôi khi, sau một vài lần lặp, mô hình có thể bắt đầu quá khớp, do đó nó sẽ bắt đầu tăng phương sai quá nhiều, ảnh hưởng đến dự đoán.

Chúng tôi thấy rằng một vòng lặp đơn giản có thể giúp chúng tôi tìm ra giải pháp tối ưu trong trường hợp này. Tuy nhiên, chắc chắn, đối với các tập dữ liệu lớn, việc tính toán có thể tốn kém, do đó, một ý tưởng sẽ là thử mức thấp hơn n_estimators lúc đầu và xem liệu bạn có thể sớm đạt được lỗi tối thiểu hay không.

Đây là mã hoàn chỉnh trong GitHub.

Nếu bạn thích nội dung này, hãy theo dõi blog của tôi.

Tìm tôi trên LinkedIn.

Bài tập này dựa trên cuốn sách giáo khoa xuất sắc của Aurélien Géron, trong tài liệu tham khảo.

Cách chọn số lượng công cụ ước tính cho Tăng cường độ dốc được xuất bản lại từ nguồn https://towardsdatascience.com/how-to-choose-the-number-of-estimators-for-gradient-boosting-8d06920ab891?source=rss—-7f60cf5620c9— 4 qua https://towardsdatascience.com/feed

<!–

->

Dấu thời gian:

Thêm từ Tư vấn chuỗi khối