Mối quan hệ nghịch đảo giữa chính xác và thu hồi


10

Tôi đã thực hiện một số tìm kiếm để tìm hiểu độ chính xác và nhớ lại và tôi thấy một số biểu đồ biểu thị mối quan hệ nghịch đảo giữa độ chính xác và thu hồi và tôi bắt đầu suy nghĩ về nó để làm rõ chủ đề. Tôi tự hỏi mối quan hệ nghịch đảo luôn luôn giữ? Giả sử tôi có một vấn đề phân loại nhị phân và có các lớp được dán nhãn tích cực và tiêu cực. Sau khi đào tạo một số ví dụ tích cực thực tế được dự đoán là dương tính thật và một số trong số chúng là phủ định sai và một số ví dụ tiêu cực thực tế được dự đoán là âm tính thật và một số trong số chúng là dương tính giả. Để tính toán độ chính xác và thu hồi, tôi sử dụng các công thức sau: và Nếu tôi giảm âm tính sai thì dương thực sự tăng và trong trường hợp đó don ' t chính xác và thu hồi cả hai tăng?

Precision=TPTP+FP
Recall=TPTP+FN

Câu trả lời:


6

Nếu chúng ta giảm âm tính giả (chọn thêm số dương), thu hồi luôn tăng, nhưng độ chính xác có thể tăng hoặc giảm. Nói chung, đối với các mô hình tốt hơn ngẫu nhiên, độ chính xác và thu hồi có mối quan hệ nghịch đảo ( câu trả lời của @pythinker ), nhưng đối với các mô hình xấu hơn ngẫu nhiên, chúng có mối quan hệ trực tiếp ( ví dụ của @kbrose ).

Điều đáng chú ý là chúng ta có thể xây dựng một mẫu một cách giả tạo một mô hình tốt hơn so với ngẫu nhiên trên phân phối thực để thực hiện kém hơn ngẫu nhiên, vì vậy chúng tôi giả định rằng mẫu đó giống với phân phối thực.

Gợi lại

Do đó, chúng ta có , thu hồi sẽ là luôn tăng khi giảm .

TP=PFN
r=PFNP=1FNP
FN

Độ chính xác

Đối với độ chính xác, mối quan hệ không đơn giản như vậy. Hãy bắt đầu với hai ví dụ.

Trường hợp đầu tiên : giảm độ chính xác, bằng cách giảm âm tính giả:

label   model prediction
1       0.8
0       0.2
0       0.2
1       0.2

Đối với ngưỡng (sai âm = ),0.5{(1,0.2)}

p=11+0=1

Đối với ngưỡng (sai âm = ),0.0{}

p=22+2=0.5

Trường hợp thứ hai : tăng độ chính xác, bằng cách giảm âm tính giả (giống như ví dụ @kbrose ):

label   model prediction
0       1.0
1       0.4
0       0.1

Đối với ngưỡng (sai âm = ),0.5{(1,0.4)}

p=00+1=0

Đối với ngưỡng (sai âm = ),0.0{}

p=11+2=0.33

Điều đáng chú ý là đường cong ROC cho trường hợp này là

Phân tích độ chính xác dựa trên đường cong ROC

Khi chúng ta hạ thấp ngưỡng, âm tính giả sẽ giảm và [tỷ lệ] dương thực sự tăng, tương đương với việc di chuyển sang phải trong biểu đồ ROC . Tôi đã thực hiện một mô phỏng cho các mô hình tốt hơn ngẫu nhiên, ngẫu nhiên và tồi tệ hơn ngẫu nhiên, và vẽ ROC, thu hồi và độ chính xác:

Như bạn có thể thấy, bằng cách di chuyển sang phải, đối với mô hình tốt hơn ngẫu nhiên, độ chính xác giảm, đối với mô hình ngẫu nhiên, độ chính xác có dao động đáng kể và tăng độ chính xác của mô hình kém hơn ngẫu nhiên. Và có sự dao động nhẹ trong cả ba trường hợp. Vì thế,

Bằng cách tăng thu hồi, nếu mô hình tốt hơn ngẫu nhiên, độ chính xác thường giảm. Nếu chế độ tệ hơn ngẫu nhiên, độ chính xác thường tăng.

Đây là mã cho mô phỏng:

import numpy as np
from sklearn.metrics import roc_curve
from matplotlib import pyplot

np.random.seed(123)
count = 2000
P = int(count * 0.5)
N = count - P
# first half zero, second half one
y_true = np.concatenate((np.zeros((N, 1)), np.ones((P, 1))))

title = 'Better-than-random model'
# title = 'Random model'
# title = 'Worse-than-random model'
if title == 'Better-than-random model':
    # GOOD: model output increases from 0 to 1 with noise
    y_score = np.array([p + np.random.randint(-1000, 1000)/3000
                        for p in np.arange(0, 1, 1.0 / count)]).reshape((-1, 1))
elif title == 'Random model':
    # RANDOM: model output is purely random
    y_score = np.array([np.random.randint(-1000, 1000)/3000
                        for p in np.arange(0, 1, 1.0 / count)]).reshape((-1, 1))
elif title == 'Worse-than-random model':
    # SUB RANDOM: model output decreases from 0 to -1 (worse than random)
    y_score = np.array([-p + np.random.randint(-1000, 1000)/1000
                        for p in np.arange(0, 1, 1.0 / count)]).reshape((-1, 1))

# calculate ROC (fpr, tpr) points
fpr, tpr, thresholds = roc_curve(y_true, y_score)
# calculate recall, precision, and accuracy for corresponding thresholds
# recall = TP / P
recall = np.array([np.sum(y_true[y_score > t])/P
                   for t in thresholds]).reshape((-1, 1))
# precision = TP / (TP + FP)
precision = np.array([np.sum(y_true[y_score > t])/np.count_nonzero(y_score > t)
                      for t in thresholds]).reshape((-1, 1))
# accuracy = (TP + TN) / (P + N)
accuracy = np.array([(np.sum(y_true[y_score > t]) + np.sum(1 - y_true[y_score < t]))
                     /len(y_score)
                      for t in thresholds]).reshape((-1, 1))

# Sort performance measures from min tpr to max tpr
index = np.argsort(tpr)
tpr_sorted = tpr[index]
recall_sorted = recall[index]
precision_sorted = precision[index]
accuracy_sorted = accuracy[index]

# visualize
fig, ax = pyplot.subplots(3, 1)
fig.suptitle(title, fontsize=12)

line = np.arange(0, len(thresholds))/len(thresholds)
ax[0].plot(fpr, tpr, label='ROC', color='purple')
ax[0].plot(line, line, '--', label='random', color='black')
ax[0].set_xlabel('fpr')
ax[0].legend(loc='center left', bbox_to_anchor=(1, 0.5))
ax[1].plot(line, recall, label='recall', color='blue')
ax[1].plot(line, precision, label='precision', color='red')
ax[1].plot(line, accuracy, label='accuracy', color='black')
ax[1].set_xlabel('1 - threshold')
ax[1].legend(loc='center left', bbox_to_anchor=(1, 0.5))
ax[2].plot(tpr_sorted, recall_sorted, label='recall', color='blue')
ax[2].plot(tpr_sorted, precision_sorted, label='precision', color='red')
ax[2].plot(tpr_sorted, accuracy_sorted, label='accuracy', color='black')
ax[2].set_xlabel('tpr (1 - fnr)')
ax[2].legend(loc='center left', bbox_to_anchor=(1, 0.5))

fig.tight_layout()
fig.subplots_adjust(top=0.88)
pyplot.show()

Vì vậy, khi các hiện tượng ngẫu nhiên hoàn toàn quy tắc, trong thực tế người ta quan sát thấy rằng chúng thường có mối quan hệ nghịch đảo. Có nhiều tình huống khác nhau, nhưng chúng ta có thể nói chung nếu chúng ta tăng độ chính xác có nghĩa là chúng ta dự đoán các ví dụ tiêu cực chính xác hơn và nếu chúng ta tăng thu hồi có nghĩa là chúng ta dự đoán các ví dụ tích cực chính xác hơn?
Tolga Karahan

@TolgaKarahan Trước tiên, chúng ta cần định nghĩa "chính xác hơn" theo TN, TP, v.v. Ví dụ: "độ chính xác" dành cho cả mặt tích cực và tiêu cực, tức là (TP + TN / P + N) mà tôi đã thêm nó vào các ô, nó có một sự gia tăng và giảm cho các mô hình tốt hơn ngẫu nhiên.
Esmailian

Ý tôi là tỷ lệ của các nhãn được dự đoán chính xác cho tất cả các nhãn cho một lớp cụ thể. Giống như TP / P hoặc TN / N. Nếu tôi tăng độ chính xác, nó có dự đoán các ví dụ tiêu cực chính xác hơn với việc tăng TN / N không?
Tolga Karahan

@TolgaKarahan Aha. Đối với các mô hình tốt hơn ngẫu nhiên, tăng độ chính xác có nghĩa là giảm thu hồi (và ngược lại), đó là giảm TP / P (P = TP + FN). Đối với TN / N, chúng tôi biết khi nào ngưỡng tăng (giảm thu hồi) cả TP và FP đều giảm do chúng tôi đang chọn ít tích cực hơn, do đó, FP / N giảm và 1 - FP / N = TN / N tăng . Vì vậy, câu trả lời cho câu hỏi của bạn là có.
Esmailian

Thật tốt Cuối cùng Nếu tôi định nghĩa TP / P là thu hồi dương và TN / N là thu hồi âm thì tôi cho rằng với độ chính xác tăng, tôi tăng thu hồi âm và tăng thu hồi vì đó là điều tương tự tôi cũng tăng thu hồi dương. Vì vậy, có vẻ như vấn đề tăng thu hồi tiêu cực hoặc tích cực và cái nào quan trọng hơn đối với tôi.
Tolga Karahan

3

Bạn đúng @Tolga, cả hai có thể tăng cùng một lúc. Hãy xem xét các dữ liệu sau:

Prediction | True Class
       1.0 | 0
       0.5 | 1
       0.0 | 0

Nếu bạn đặt điểm cắt của mình là 0,75, thì bạn có

Precision=TPTP+FP=00+1=0
Recall=TPTP+FN=00+1=0

sau đó nếu bạn giảm điểm cắt của bạn xuống 0,25, bạn có

Precision=TPTP+FP=11+1=0.5
Recall=TPTP+FN=11+0=1

và vì vậy bạn có thể thấy, cả độ chính xác và thu hồi đều tăng khi chúng tôi giảm số lượng Âm tính giả.


1
Cảm ơn bạn. Có vẻ như phân phối dữ liệu rất quan trọng và tất nhiên nó không gây ngạc nhiên.
Tolga Karahan

Nhưng bạn vẫn cần phải thực tế. Bạn không thể giảm số lượng Âm tính giả mà không tăng số lượng Tích cực sai.
Pedro Henrique Monforte

Bạn không cung cấp dữ liệu và không có đối số để sao lưu yêu cầu của mình. Tôi cung cấp một ví dụ cho thấy chính xác lý do tại sao tuyên bố của OP là chính xác. Và tôi là người cần phải thực tế. Có thật không?
kbrose

3

Cảm ơn cho tuyên bố rõ ràng của vấn đề. Vấn đề là nếu bạn muốn giảm âm tính giả, bạn nên hạ thấp đủ ngưỡng của hàm quyết định. Nếu các tiêu cực sai được giảm, như bạn đã đề cập, dương tính thật tăng nhưng dương tính giả cũng có thể tăng. Kết quả là, thu hồi sẽ tăng và độ chính xác sẽ giảm.


1
Tôi mới học được chủ đề này và có vẻ như tôi tập trung vào các phương trình rất nhiều với việc bỏ qua các hiệu ứng thay đổi mô hình. Giải thích này đã giúp làm rõ mọi thứ. Cảm ơn bạn.
Tolga Karahan

@ TolgaKarahanBạn hoan nghênh. Tôi rất hài lòng câu trả lời của tôi đã giúp.
pythinker

Điều này là không chính xác. Xem câu trả lời của tôi.
kbrose
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.