Thu hồi chính xác xgboost python

Tôi đang sử dụng XGBoost cho vấn đề phân loại đa biến. Với mã tôi có bây giờ (xem bên dưới), tôi có thể nhận được tỷ lệ dương tính giả (fpr), tỷ lệ dương tính thực (_______2_______) và diện tích dưới đường cong ROC (auc) ở các giá trị ngưỡng khác nhau

Tôi cần các số liệu bổ sung để mô tả hiệu suất của mô hình. Đặc biệt

  1. Đối với mỗi ngưỡng, tôi cần tính a) độ chính xác, b) thu hồi và c) độ chính xác
  2. Đối với mỗi kỷ nguyên đào tạo, tôi cần tính toán tổn thất

Bạn có gợi ý nào về cách tiến hành các điểm trên không?

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, roc_curve, accuracy_score

cv = RepeatedKFold(n_splits=3, n_repeats=1, random_state=101)
folds = [(train,test) for train, test in cv.split(X_train, y_train)]

metrics = ['auc', 'fpr', 'tpr', 'thresholds']
results = {
    'train': {m:[] for m in metrics},
    'val'  : {m:[] for m in metrics},
    'test' : {m:[] for m in metrics}
}

params = {
    'objective'   : 'binary:logistic',
    'eval_metric' : 'logloss',
    'tree_method': 'gpu_hist'
}

dtest = xgb.DMatrix(X_test, label=y_test)
for train, test in tqdm(folds, total=len(folds)):
    dtrain = xgb.DMatrix(X_train.iloc[train,:], label=y_train.iloc[train])
    dval   = xgb.DMatrix(X_train.iloc[test,:], label=y_train.iloc[test])
    model  = xgb.train(
        dtrain                = dtrain,
        params                = params, 
        evals                 = [(dtrain, 'train'), (dval, 'val')],
        num_boost_round       = 1000,
        verbose_eval          = False,
        early_stopping_rounds = 10,
    )
    sets = [dtrain, dval, dtest]
    for i,ds in enumerate(results.keys()):
        y_preds              = model.predict(sets[i])
        predictions = [round(value) for value in y_preds]
        
        labels               = sets[i].get_label()
        fpr, tpr, thresholds = roc_curve(labels, y_preds)
        results[ds]['fpr'].append(fpr)
        results[ds]['tpr'].append(tpr)
        results[ds]['thresholds'].append(thresholds)
        results[ds]['auc'].append(roc_auc_score(labels, y_preds))

Chào toàn thể anh em Mì Ai. Hôm nay chúng ta sẽ tìm hiểu sâu một chút về mAP, một thước đo đo lường hiệu quả của mô hình Phát hiện đối tượng (OD) mà chúng ta đã sử dụng trước đây

Đầu tiên mình xin nói trước là Mì AI là cộng đồng thiên về thực hành, các nội dung về lý thuyết đều tìm hiểu ở dạng cơ bản nhất để có ý niệm trong đầu nó là cái gì?

Còn bây giờ thì bắt đầu thôi

Phát hiện đối tượng là làm gì?

Bài toán OD thì mô hình phải làm 2 task

  • Xác định sự xuất hiện của các đối tượng trong ảnh bằng cách dự đoán hộp giới hạn
  • Gán lớp cho đối tượng đó

Và khi thực hiện gán lớp, mô hình sẽ gán với một xác suất nhất định. Ví dụ. 90% đây là chó, 10% đây là mèo

Chúng ta cần xác định Ngưỡng tự tin cho mô hình, ví dụ trên 50%, trên 60% hay thậm chí trên 80% thì mới được coi là lớp dự đoán đúng đó

Can a metric for Object Detection model

Trong cuộc sống, khi chúng ta làm gì, chúng ta cũng cần đặt ra tiêu chí để khẳng định rằng việc chúng ta làm đã đúng mục đích chưa, đã mang lại hiệu quả chưa

Trong AI, khi chúng ta đào tạo mô hình thật là hạn chế, thì chúng ta cũng phải đặt ra cho mình tiêu chí đo lường khi nào thì dừng việc đào tạo?

With a model phan loại Chó/Mèo đơn giản đi. Thì chúng ta thấy bài toán có thể đo lường thông qua Precision, Recall, Confusion Metric, Accuracy…

Còn với một model OD, chúng ta sẽ làm quen với Precision, Recall, AP và mAP

mAP sẽ là một tiêu chí đo lường của các mô hình Phát hiện đối tượng

Để tìm hiểu mAP chúng ta sẽ đi qua các lần đánh giá khái niệm IoU, Precision, Recall, Precision Recall Curve, AUC, AP và mAP nhé

Tìm hiểu về IoU

IoU viết tắt của Intersection over Union, tạm dịch. Giao trên hợp (bỏ chữ trên đi nhá =)) ). Để hiểu rõ hơn các bạn nhìn vào hình bên dưới rồi mình sẽ giải thích

Thu hồi chính xác xgboost python
Nguồn. at here

Thu hồi chính xác xgboost python
Nguồn. at here

Thế còn Precision, Recall và Precision Recall Curve là cái gì?

Thực ra mình đã có một bài trên Mì AI nói về Precision và Recall rồi, các bạn có thể tìm đọc lại tại đây. Tại đây mình chỉ nhắc lại rút gọn thôi nhé

Precision – đại diện cho độ tin cậy của mô hình

Nó sẽ cho biết rằng trong những cái mô hình dự đoán là Tích cực thì có bao nhiêu % là Tích cực thật. Ví dụ. 10 ca bệnh được đưa vào khám bệnh, trong đó có 8 ca bệnh được mô hình dự đoán là ung thư. Cơ mà thực tế chỉ có 5 ông là ung thư thật còn lại 3 ông là người mẫu dự đoán sai

Vậy thì

Precision – Độ tin cậy

= Dự đoán là Ung thư và đúng là thế (True Positive) / Tổng số dự đoán là Ung thư (#Positive Predictions)

= Số dự đoán là Ung thư và đúng là thế (True Positive)/ [ Số dự đoán là ung thư và đúng là thế (True positive) + Số dự đoán là ung thư nhưng sai lòi (False positive) ]

= 5 / (5+3)

= 5/8 = 0. 625

Recall – interface for mode of model

Nó sẽ cho biết mô hình có thể biên chính xác được bao nhiêu Tích cực trong dữ liệu được cho. Ví dụ. 10 ca bệnh vào khám, trong đó có 5 ca bệnh là ung thư thật. Giả sử mô hình nhận diện được 3 ông là ung thư, 7 ông còn lại là bình thường

Vậy thì

Nhớ lại

= Dự đoán là Ung thư và đúng là thế (True positive) / Tổng số bệnh nhân ung thư có thật trong dữ liệu

= 3/5

= 0. 6

Thế còn Precision Recall Curve là cái quái gì nữa?

Đoạn này chúng ta nhắc đến một khái niệm mới là ngưỡng IoU (ngưỡng). Lý do chúng ta cần khái niệm này là bởi vì, với dự đoán của mô hình, nếu IoU> ngưỡng đó thì được coi là Tích cực thực (nhận chuẩn) và ngược lại nếu < ngưỡng thì sẽ coi là Tích cực sai (nhận là Tích cực nhưng

Từ đó, chúng ta thay đổi ngưỡng IoU, tính toán ra Precision và Recall ở mức độ đó và vẽ ra Precision Recall Curve như sau (ngưỡng chạy từ 0 đến 1 với bước nhảy 0. 001 Undefault)

Thu hồi chính xác xgboost python
Nguồn. at here

Đến đây chắc các bạn lại hỏi cách vẽ cái đường này ra làm gì?

Chúng ta vẽ ra một đồ thị trên đó để tính toán AP – Average Precision. AP chính là vùng diện tích màu xanh nằm bên dưới đường cong Precision Recall nói trên

  • AP lớn nếu vùng này lớn, suy ra đường cong có xu hướng gần góc bên phải và có nghĩa là ở các ngưỡng khác nhau thì Precision và Recall đều khá cao. Từ đó suy ra mô hình tốt
  • AP nhỏ thì cả Precision và Recall đều khá thấp và model không tốt

Vì vậy, chúng ta đã nắm giữ AP. Play end map

Trùm cuối, mAP là gì?

Rồi như vậy với mỗi lớp trong bài toán ta sẽ có một giá trị AP. Còn mAP là gì thì đang có nhiều khái niệm khác nhau trong nhiều bài toán, ngữ cảnh khác nhau. Trong bài này thì đơn giản mAP là Mean Average Precision là trung bình cộng giá trị AP của các lớp khác nhau, vậy thôi

Thu hồi chính xác xgboost python
Nguồn. at here

Lý thuyết là vậy, còn trong các bài toán hiện tại thì khi chúng ta sử dụng các repo như YOLO giả sử thì họ luôn làm các công việc tính toán này cho chúng ta rồi. Chúng ta chỉ cần luyện sao cho bản đồ lớn nhất có thể và ra mà thôi. )

Bạn nào muốn tìm hiểu chuyên sâu có thể google thêm và thử tính toán để trải nghiệm nhé

Mình xin nhấn mạnh đây là một cách tính trong vô và cách tính AP và mAP. Các bạn không ngạc nhiên khi thấy một cách tính khác. Tuy nhiên các bạn chỉ cần nhớ là mAP càng lớn thì mẫu mã càng tốt nhá 😀