Hướng dẫn xgboost get auc python - xgboost get auc python

Hướng dẫn xgboost get auc python - xgboost get auc python

Đường cong ROC cho cây quyết định trong Python

Công thức khách quan trong khi làm việc trên một mô hình phân loại, chúng tôi cảm thấy cần một số liệu có thể cho chúng tôi thấy mô hình của chúng tôi hoạt động như thế nào. Một số liệu cũng có thể đưa ra một biểu diễn đồ họa của ...

Phân phối tiêu chuẩn Hướng Dẫn trong Python

Ngay cả khi bạn không ở trong lĩnh vực thống kê, bạn cũng phải bắt gặp thuật ngữ phân phối bình thường. Ví dụ thực hiện bình thường ...

Đường cong ROC từ ma trận python nhầm lẫn

Tôi cần xác định làm thế nào các mô hình phân loại khác nhau dự đoán các giá trị. Để làm điều này, tôi cần vẽ một đường cong ROC nhưng tôi đang đấu tranh để phát triển một cách tiếp cận. Tôi đã bao gồm toàn bộ con trăn của mình ...

Hướng dẫn Dùng Roc Curve Python

Tômi đang cố gắng vẽ đồ thị roc Để

Làm thế nào để bạn xác định độ chính xác trong Python?

Giữ tổ chức với các bộ sưu tập lưu và phân loại nội dung dựa trên sở thích của bạn. Độ chính xác là một số liệu để đánh giá các mô hình phân loại. Không chính thức, độ chính xác là phần của ...

Hướng Dẫn 3d Roc Curve Python

Hồi quy logistic là một phương pháp thống kê mà chúng tôi sử dụng để phù hợp với mô hình hồi quy khi biến phản hồi là nhị phân. Để đánh giá mô hình hồi quy logistic phù hợp với bộ dữ liệu tốt như thế nào, chúng ta có thể ...

Hướng dẫn roc đường cong python sklearn

sklearn.metrics.plot_roc_curve (công cụ ước tính, x, y, *, sample_weight = none, drop_intermediate = true .

Hướng dẫn ngoại suy tuyến tính Python

Hướng dẫn là số nguyên tố pythonexample để kiểm tra xem một số nguyên có phải là số nguyên tố hay không sử dụng cho vòng lặp và nếu ... câu lệnh khác. Nếu số không phải là số nguyên tố, nó được giải thích trong đầu ra tại sao nó ...

Làm thế nào để bạn vẽ một đường cong ROC trong Python Sklearn?

sklearn.metrics.plot_roc_curve (công cụ ước tính, x, y, *, sample_weight = none, drop_intermediate = true .

Hướng dẫn ngoại suy tuyến tính Python

Hướng dẫn là số nguyên tố pythonexample để kiểm tra xem một số nguyên có phải là số nguyên tố hay không sử dụng cho vòng lặp và nếu ... câu lệnh khác. Nếu số không phải là số nguyên tố, nó được giải thích trong đầu ra tại sao nó ...

Làm thế nào để bạn vẽ một đường cong ROC trong Python Sklearn?

Tômi đang cố gắng vẽ đồ thị roc Để

Làm thế nào để bạn xác định độ chính xác trong Python?

Tômi đang cố gắng vẽ đồ thị roc Để

Làm thế nào để bạn xác định độ chính xác trong Python?

Tômi đang cố gắng vẽ đồ thị roc Để

Làm thế nào để bạn xác định độ chính xác trong Python?

Tômi đang cố gắng vẽ đồ thị roc Để

Hiển thị sự mạnh mẽ của hiệu suất phân loại của bạn trong biểu đồ ROC gộp

Ảnh của Kyle Glenn trên unplash

Trong học máy, một quy tắc quan trọng là bạn không nên ghi điểm mô hình của mình trên dữ liệu chưa từng thấy trước đó (hay còn gọi là bộ kiểm tra của bạn) cho đến khi bạn hài lòng với kết quả của mình bằng cách sử dụng dữ liệu đào tạo duy nhất.

Để hiển thị hiệu suất và độ mạnh của mô hình của bạn, bạn có thể sử dụng nhiều bộ đào tạo và kiểm tra trong dữ liệu đào tạo của bạn. Để ngăn chặn sự nhầm lẫn, chúng tôi gọi nó là bộ xác thực, nếu đó là một phần của dữ liệu tàu. Chia dữ liệu đào tạo thành nhiều bộ đào tạo và xác nhận được gọi là xác nhận chéo. Tỷ lệ, kích thước và số lượng bộ phụ thuộc vào phương pháp xác thực chéo và kích thước của bộ đào tạo của bạn. Phổ biến nhất có lẽ là K-Fold, nhưng tùy thuộc vào kích thước của bộ đào tạo mà bạn có thể muốn thử bootstrapping hoặc rời khỏi một. Mỗi phương pháp đều có ưu điểm và nhược điểm như tăng cường tập luyện hoặc xác nhận kích thước tập hợp mỗi lần. Tôi sẽ không đi sâu vào chi tiết, có rất nhiều bài viết tuyệt vời về phương tiện về chủ đề này.

Vì vậy, chúng tôi đang sử dụng một số loại xác thực chéo với trình phân loại để đào tạo và xác nhận mô hình nhiều lần. Cách tiếp cận này dẫn đến một loạt các kết quả điểm. Có lẽ số liệu phổ biến nhất là đường cong ROC để so sánh các hiệu suất mô hình với nhau. Nó không tính đến sự mất cân bằng của lớp, điều này khiến nó hữu ích khi so sánh với các mô hình khác được đào tạo với các dữ liệu khác nhau nhưng trong cùng một lĩnh vực nghiên cứu. Một bổ sung tuyệt vời cho đường cong ROC là một đường cong PRC có tính đến sự mất cân bằng của lớp và giúp đánh giá hiệu suất của các mô hình khác nhau được đào tạo với cùng một dữ liệu. Nhưng một lần nữa, đã có rất nhiều bài viết tuyệt vời về phương tiện trên tất cả các loại số liệu. Để có được một đường cong ROC, về cơ bản, bạn vẽ tỷ lệ dương (TPR) thực sự so với tỷ lệ dương tính giả (FPR). Để chỉ ra hiệu suất của mô hình của bạn, bạn tính toán khu vực dưới đường cong ROC (AUC).

Giả sử chúng tôi đã đào tạo một phân loại XGBOOST trong xác thực chéo 100 x 5 lần và có 500 kết quả. Đối với mỗi nếp gấp, chúng ta phải trích xuất TPR-còn được gọi là độ nhạy-và FPR-còn được gọi là độ đặc hiệu 1-và tính toán AUC. Dựa trên loạt kết quả này, bạn thực sự có thể cung cấp một khoảng tin cậy để thể hiện sự mạnh mẽ của trình phân loại của bạn.

Vì điều này đặc biệt có nghĩa là để chỉ ra cách xây dựng một lô ROC được gộp, tôi sẽ không chạy lựa chọn tính năng hoặc tối ưu hóa các tham số của mình.

Trước hết, chúng tôi nhập một số gói và tải tập dữ liệu:

import numpy as np
import pandas as pd
import plotly.graph_objects as go
from tqdm.notebook import tqdm
from sklearn.model_selection import RepeatedKFold
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, roc_curve
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data'
df = pd.read_csv(url, header=None)

Có một vài giá trị bị thiếu được ký hiệu là?

for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()

Bộ dữ liệu ung thư Cleveland có mục tiêu được mã hóa trong 0-4 mà chúng tôi sẽ tham gia lớp 0 với tất cả các mục tiêu được mã hóa là 0 và 1 với tất cả các mục tiêu được mã hóa là 1 trận4.

def binarize(x):
if x==0:
value=0
else:
value=1
return value
df[13] = df[13].map(binarize)

Tiếp theo, chúng tôi xác định các tính năng của chúng tôi và nhãn và chia dữ liệu:

X = df.drop(13, axis=1)
y = df[13]

Bây giờ chúng tôi thực hiện phân chia dữ liệu phân tầng để duy trì sự mất cân bằng của lớp tiềm năng:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=101, stratify=y)

Bây giờ chúng tôi có thể nhận được các nếp gấp bằng cách sử dụng bộ tàu của chúng tôi. Tôi sử dụng K-Fold lặp đi lặp lại để có thêm kết quả điểm số:

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

Hãy xây dựng một từ điển để thu thập kết quả của chúng tôi trong:

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

Để khởi tạo XGBOOST, chúng tôi phải chọn một số tham số:

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

Bây giờ là lúc để chạy xác thực chéo của chúng tôi và lưu tất cả các điểm vào từ điển của chúng tôi:

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])
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))

Đây là một thủ tục khá dễ dàng. Ngoài ra còn có khả năng sử dụng

for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
0 bên trong phương pháp
for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
1, để đặt điểm số của bạn vào một chức năng tùy chỉnh, nhưng tôi đã thực hiện trải nghiệm rằng nó chậm hơn và khó hơn nhiều để gỡ lỗi.

Bây giờ chúng tôi có kết quả từ 100 nếp gấp xác thực chéo, chúng tôi có thể vẽ đường cong ROC của mình:

for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
1

Bạn có thể làm cho mã ngắn hơn bằng cách sử dụng phương pháp điền Plotlys

for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
2, nhưng bằng cách này, bạn linh hoạt hơn về màu sắc hoặc thay đổi cụ thể trên ranh giới dưới hoặc trên. Đây là kết quả của điểm số trên bộ xác thực trong quy trình Kold của chúng tôi:ROC điểm số trên bộ xác thực

Khi bạn điều chỉnh mô hình của mình, tìm thấy một số tính năng tốt hơn và tối ưu hóa các tham số của bạn, bạn có thể tiếp tục và vẽ biểu đồ cùng một biểu đồ cho dữ liệu thử nghiệm của bạn bằng cách thay đổi

for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
3 thành
for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
4 trong mã trên. Hãy xem cách các mô hình thực hiện trên bộ thử nghiệm của chúng tôi:ROC điểm số trên bộ kiểm tra

Tất nhiên, bạn có thể sử dụng cùng một quy trình để xây dựng đường cong thu hồi chính xác (PRC) và lưu mức độ quan trọng của tính năng của mỗi lần để kiểm tra hiệu suất khi sự mất cân bằng của lớp cao hoặc để có ý tưởng về sự mạnh mẽ của các tính năng của bạn.

Vì chúng tôi đang sử dụng

for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
5 để vẽ kết quả, nên cốt truyện là tương tác và có thể được hiển thị bên trong một ứng dụng
for i in range(13):
df[i] = df[i].apply(lambda x: np.nan if x=='?' else x)
df[i] = df[i].astype(float)
df = df.dropna()
6 chẳng hạn.

Hy vọng điều này đang giúp một số nhà khoa học dữ liệu đồng nghiệp trình bày hiệu suất của các trình phân loại của họ. Cảm ơn vì đã đọc!