Mục đích của bài toán phát triển quy mô dự đoán là tạo ra một quy mô có độ đúng chuẩn cao khi kiểm soát trên cỗ dữ liệu độc lập với dữ liệu train (gọi là unseen data).Trong nội dung bài viết này, họ cùng tìm hiểu hai cách thức đánh giá chỉ một XGBoost model:
Sử dụng train và test dataset.Sử dụng k-fold cross-validation.Bạn trả toàn có thể áp dụng những cách thức trong bài này cho phần lớn ML models khác. Tại vày dạo này mình đang tìm hiểu vê XGBoost model nên mình rước XGBoost mã sản phẩm làm ví dụ như thôi.Bạn đang xem: Sử dụng thuật toán XGBoost để dự đoán dữ liệu
1. Phương pháp 1: áp dụng train-test set
Đây là phương thức đơn giản độc nhất vô nhị để đánh giá một ML model. Từ bỏ tập dữ liệu ban đầu, ta chia thành 2 phần, hotline là train set và test set theo tỉ lệ một mực (thường là 7:3, 8:2 hoặc thậm chí 9:1 tùy theo form size của tập và đặc trưng của tập dữ liệu). Sau đó, tiến hành train model trên train set rồi sử dụng model đã train đó để tham gia đoán trên tập thử nghiệm set. Dựa trên kết quả của dự đoán để đưa ra tiến công giá unique của model.
Ưu điểm của phương pháp này là nhanh. Nó sẽ cân xứng để vận dụng khi bài toán của doanh nghiệp đáp ứng không nhiều nhất 1 trong các 2 tiêu chí sau:
Tập tài liệu có kích cỡ lớn (hàng triệu mẫu) và tất cả cơ sở nhằm tin rằng cả 2 phần tài liệu đều đại diện thay mặt đầy đầy đủ cho tất cả các tinh tế của vụ việc cần dự kiến (để chắc chắn hơn về điều này, ta hoàn toàn có thể xáo trộn bỗng dưng tập dữ liệu trước khi chia)Thuật toán train của model rất lâu để hội tụ.Nếu đk thứ 2 không vừa lòng mà ta vẫn sử dụng phương thức này thì sẽ chạm mặt phải vụ việc high variance. Có nghĩa là khi 2 tập train set và thử nghiệm set cất những đại diện thay mặt khác nhau của vụ việc cần dự kiến thì hiệu quả đánh giá trên tập demo set không mô tả đúng chất lượng của model.
Thư viện scikit-learn cung cấp hàm train_test_split() giúp bọn họ thực hiện vấn đề chia dữ liệu:
# split data into train & test sets
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=7)
Source code dưới đây sử dụng Pima Indians onset of diabetes dataset để train XGBoost mã sản phẩm và reviews model theo cách thức này:
# train-test split evaluation of XGBoost modelfrom numpy import loadtxtfrom XGBoost import XGBClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score# load datadataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")# split data into X and y
X = dataset<:,0:8>Y = dataset<:,8># split data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=7)# fit mã sản phẩm on training datamodel = XGBClassifier()model.fit(X_train, y_train)# make predictions for kiểm tra datapredictions = model.predict(X_test)# evaluate predictionsaccuracy = accuracy_score(y_test, predictions)print("Accuracy: %.2f%%" % (accuracy * 100.0))
Chạy code trên chiếm được kết quả:
Accuracy: 74.02%2. Phương thức 2: k-fold cross-validation
Cross-validation là phương thức mở rộng lớn của phương pháp bên trên để giảm bớt được sự việc high variance. Các bước tiến hành của chính nó như sau:
Xáo trộn dữ liệu một phương pháp ngẫu nhiên.Chia tập dữ liệu ban sơ thành k phần (k=5,10,…), từng phần gọi là một trong fold. - train mã sản phẩm trên k-1 fold và review trên fold còn lại.Lặp lại k lần bước bên trên để mỗi fold vào tập tài liệu đều có cơ hội trở thành demo set.Sau khi toàn thể quá trình ngừng ta sẽ sở hữu k kết quả đánh giá chỉ khác nhau, kêt quả ở đầu cuối sẽ được tổng hợp nhờ vào trung bình (mean) và độ lệch chuẩn (standard deviation) của k hiệu quả đó.Phương pháp này cho công dụng đánh giá tin cậy hơn so với phương thức sử dụng train-test set cũng chính vì nó được train và review nhiều lần trên những tập dữ liệu khác nhau. Việc lựa lựa chọn k cũng cần phải xem xét sao cho kích thước của mỗi fold đủ mập để dữ liệu trong mỗi fold với tính thay mặt cao về phương diện thống kê của toàn bộ dữ liệu. Thực nghiệm cho thấy thêm k=5 hoặc k=10 là lựa chọn cực tốt cho số đông các ngôi trường hợp. Hãy thực hiện 2 quý hiếm này trước lúc thử nghiệm với các giá trị khác.
Thư viện scikit-learn cung cấp lớp KFold nhằm sử dụng phương pháp này. Đầu tiên, khai báo đối tượng KFold và chỉ ra giá trị của k. Sau đó sử dụng hàm cross_val_score() để bắt đầu đánh giá bán model.
kfold = KFold(n_splits=10, random_state=7)results = cross_val_score(model, X, Y, cv=kfold)
Code đầy đủ như mặt dưới:
# k-fold cross validation evaluation of XGBoost modelfrom numpy import loadtxtfrom XGBoost import XGBClassifierfrom sklearn.model_selection import KFoldfrom sklearn.model_selection import cross_val_score# load datadataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")# split data into X & y
X = dataset<:,0:8>Y = dataset<:,8># CV modelmodel = XGBClassifier()kfold = KFold(n_splits=10, random_state=7)results = cross_val_score(model, X, Y, cv=kfold)print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
Chạy code trên nhận được kết quả:
Accuracy: 73.96% (4.77%)Nếu bài toán là multi-classification hoặc tài liệu bị mất thăng bằng (imbalanced) giữa những lớp (số lượng chủng loại giữa những lớp chênh lệch nhau lớn) thì ta rất có thể sử dụng lớp Stratified
KFold thay bởi vì KFold của tủ sách scikit-learn. Việc làm này có công dụng làm cho việc phân phối dữ liệu trong mỗi fold như là nhau hơn, nâng cấp hiệu quả của model.
# stratified k-fold cross validation evaluation of XGBoost modelfrom numpy import loadtxtfrom XGBoost import XGBClassifierfrom sklearn.model_selection import Stratified
KFoldfrom sklearn.model_selection import cross_val_score# load datadataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")# split data into X và y
X = dataset<:,0:8>Y = dataset<:,8># CV modelmodel = XGBClassifier()kfold = Stratified
KFold(n_splits=10, random_state=7)results = cross_val_score(model, X, Y, cv=kfold)print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
Chạy code trên được output là:
Accuracy: 73.57% (4.39%)Có thể thấy ràng variance bao gồm sự sút nhẹ trong kết quả.
3. Lựa chọn cách thức đánh giá chỉ nào?
Nói chung, k-fold cross-validation là cách thức tốt nhất mang lại việc reviews hiệu năng của một ML mã sản phẩm trong phần đông mọi trường hợp.Sử dụng stratified cross-validation để đảm bảo an toàn sự thống tuyệt nhất về phương diện phân phối dữ liệu khi dữ liệu có rất nhiều lớp cần dự kiến và bị mất thăng bằng giữa các lớp.Sử dụng train-test set trong trường vừa lòng thuật toán train mất quá nhiều thời gian để quy tụ và số lượng mẫu của tài liệu rất lớn.Lời khuyên hợp lí nhất là hãy thử nghiệm các lần cùng tìm ra phương thức phù phù hợp với bài toán của khách hàng sao cho nhanh nhất có thể. Phương pháp được coi là phù hợp khi nó công dụng đánh giá chỉ của nó đáp ứng nhu cầu đúng (hoặc ngay gần đúng) yêu thương cầu bài toán đề ra ban đầu.Lời khuyên ở đầu cuối (từ khiếp nghiệm thực tế của tác giả):
Sử dụng 10-fold cross-validation cho bài toán regression.Sử dụng stratified 10-fold-validation cho bài toán classification.4. Kết luận
Trong nội dung bài viết này, bọn họ đã cùng tìm 2 phương thức phổ biến đánh gía hiệu quả của một ML mã sản phẩm nói chung, XGBoost mode nói riêng:
Sử dụng train-test setSử dụng k-fold cross-validation
Ngoài ra, mình cũng đưa vài ba lời khuyên răn cho các bạn trong viêc lựa chọn phương pháp nào để áp dụng trong bài toán của những bạn!
Trong bài xích tiếp theo, chúng ta sẽ tìm hiểu phương thức visualize XGBoost model để phát âm sâu hơn bản chất của nó.
Toàn cỗ source code của bài bác này các chúng ta cũng có thể tham khảo trên github cá nhân của bản thân tại github.
XGBoost là viết tắt của Extreme Gradient Boosting. Đây là thuật toán state-of-the-art nhằm xử lý bài toán supervised learning mang đến độ đúng đắn khá cao ở bên cạnh mô hình Deep learning như bọn họ từng tìm hiểu.
Nếu Deep learning chỉ nhận đầu vào là raw data dạng numerical (ta hay phải đổi khác sang n-vector trong không khí số thực) thì XGBoost nhận đầu vào là tabular datasets cùng với mọi kích cỡ và dạng dữ liệu bao gồm cả categorical mà dạng dữ liệu này hay được search thấy nhiều hơn thế nữa trong business model, đó là lý do đầu tiên tại sao các cá nhân tham gia Kaggle thường xuyên sử dụng.
Bên cạnh đó, XGboost có tốc độ huấn luyện nhanh, có công dụng scale để giám sát và đo lường song tuy nhiên trên nhiều server, hoàn toàn có thể tăng tốc bằng cách sử dụng GPU, nhờ vậy nhưng mà Big Data chưa hẳn là vụ việc của quy mô này. Vị thế, XGBoost thường xuyên được thực hiện và đang giành được nhiều thắng lợi trong những cuộc thi trên Kaggle.
Phát biểu bài bác toán
Trong không khí tham số, Ở đây, ta áp dụng hướng tiếp cận “non-parametric” với phép buổi tối tiểu hoá Steepest-descent cho không gian hàm số thay vị trong không gian tham số. Ta coi Đặt:




















Mô hình học:


Hàm học:


Tiến trình học:


với,




Trọng số tối ưu tại từng nút lá:

Hàm lỗi tính trên toàn thể cây:

Điều khiếu nại rẽ nhánh:

XGBoost với Gradient boosting đều dựa trên cùng ý tưởng phát minh đó là boosting trải qua gradient descent trong không khí hàm số. Tuy nhiên, điều làm ra hiệu suất tuyệt hảo và khả năng đo lường và thống kê của XGBoost nằm tại vị trí ba yếu đuối tố:
Engineering để tránh overfitting như: sub-sampling row, column, column per split levels, áp dụng regularized L1 và L2.Khả năng tận dụng khoáng sản hệ thống: đo lường song tuy nhiên trên CPU/GPU, thống kê giám sát phân tán trên những server, tính toán khi tài nguyên bị giới hạn, cache optimization để tăng tốc training.Và sau cùng là kỹ năng xử lý missing data value, liên tiếp training bằng mô hình đã được build trước kia để tiết kiệm thời gian.Cuối cùng, tôi xin khép lại bài viết bằng câu tuyên bố của Tianqi Chen (người sáng tạo ra thuật toán XGBoost) lý giải tại sao mọi tín đồ đang thực hiện thuật toán này hơi phổ biến.
Xem thêm: Dịch phiên âm tiếng trung sang tiếng việt, dịch tiếng trung
The name xgboost, though, actually refers khổng lồ the engineering goal lớn push the limit of computations resources for boosted tree algorithms. Which is the reason why many people use xgboost.
– Tianqi Chen, on Quora.com
Chương trình minh hoạ
from numpy import loadtxt from xgboost import XGBClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_scorefrom sklearn.datasets import load_breast_cancer# load datadataset = load_breast_cancer(return_X_y=True)# split data into X và y X = dataset<0> Y = dataset<1># tvt splitseed = 7 test_size = 0.33 X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)eval_set = <(X_train, y_train), (X_test, y_test)># fit mã sản phẩm no training data model = XGBClassifier() model.fit(X_train, y_train, eval_metric="auc", eval_set=eval_set, verbose=True)print(model)# make predictions for test data y_pred = model.predict(X_test) predictions =