Làm thế nào để tính toán độ chính xác / thu hồi để phân loại đa lớp?


72

Tôi đang tự hỏi làm thế nào để tính toán các biện pháp chính xác và thu hồi để phân loại đa nhãn, nghĩa là phân loại có nhiều hơn hai nhãn và mỗi trường hợp có thể có nhiều nhãn?


1
phần đa nhãn làm cho nó khó hơn nhiều và tôi cũng thích thú với điều này. Tôi nghĩ rằng nó không áp dụng cho các vấn đề đa nhãn nhưng không tin tưởng tôi cả.
dùng798719

1
Trong thực tế, tất cả các vấn đề đa nhãn là đa lớp, vì vậy bạn có thể sử dụng gói utiml trong R chẳng hạn hoặc Mulan trong Java.
Adriano Rivolli

Câu trả lời:


19

Một công cụ phổ biến khác để đo hiệu suất phân loại là ROC / AUC ; cái này cũng có phần mở rộng đa lớp / đa nhãn: xem [Hand 2001]

[Hand 2001]: Một khái quát đơn giản của khu vực dưới đường cong ROC cho nhiều vấn đề phân loại lớp


Nó là phổ biến, nhưng nó có thể là lỗi. Tôi không hoàn toàn tin tưởng nó. stats.stackexchange.com/questions/93901/ Mạnh
EngrStudent

3
Không bao giờ thay đổi tràn ngăn xếp! Guy hỏi một vấn đề, hầu hết câu trả lời được bình chọn không thực sự trả lời câu hỏi của anh ta, nhưng chỉ ra một số công cụ / thư viện khác sẽ tốt hơn
ragvri

Có, làm thế nào câu trả lời này có thể có +20? Nó thậm chí không chứa các từ chính xác và thu hồi.
Simon Dirmeier

nếu bạn suy nghĩ thấu đáo, bạn sẽ nhận ra rằng độ chính xác và thu hồi thực sự được AUC nắm bắt.
oDDsKooL

16

Dưới đây là một số thảo luận về chủ đề diễn đàn coursera về ma trận nhầm lẫn và phép đo chính xác / thu hồi đa lớp.

Ý tưởng cơ bản là tính toán tất cả độ chính xác và thu hồi tất cả các lớp, sau đó lấy trung bình chúng để có được một phép đo số thực duy nhất.

Ma trận nhầm lẫn giúp dễ dàng tính toán độ chính xác và thu hồi của một lớp.

Dưới đây là một số giải thích cơ bản về ma trận nhầm lẫn, được sao chép từ chuỗi đó:

Ma trận nhầm lẫn là một cách phân loại dương tính thật, âm tính thật, dương tính giả và âm tính giả, khi có nhiều hơn 2 lớp. Nó được sử dụng để tính toán độ chính xác và thu hồi và do đó điểm F1 cho các vấn đề đa lớp.

Các giá trị thực tế được đại diện bởi các cột. Các giá trị dự đoán được đại diện bởi các hàng.

Ví dụ:

10 ví dụ đào tạo thực tế là 8, được phân loại (dự đoán) không chính xác là 5
13 ví dụ đào tạo thực sự là 4, được phân loại không chính xác là 9

Ma trận hỗn loạn

cm =
     0 1 2 3 4 5 6 7 8 9 10
     1 298 2 1 0 1 1 3 1 1 0
     2 0 293 7 4 1 0 5 2 0 0
     3 1 3 263 0 8 0 0 3 0 2
     4 1 5 0 261 4 0 3 2 0 1
     5 0 0 10 0 254 3 0 10 2 1
     6 0 4 1 1 4 300 0 1 0 0
     7 1 3 2 0 0 0 264 0 7 1
     8 3 5 3 1 7 1 0 289 1 0
     9 0 1 3 13 1 0 11 1 289 0
    10 0 6 0 1 6 1 2 1 4 304

Đối với lớp x:

  • Đúng dương: vị trí đường chéo, cm (x, x).

  • Sai dương: tổng của cột x (không có đường chéo chính), tổng (cm (:, x)) - cm (x, x).

  • Sai âm: tổng của hàng x (không có đường chéo chính), sum (cm (x, :), 2) -cm (x, x).

Bạn có thể tính toán độ chính xác, thu hồi và điểm F1 theo công thức khóa học.

Tính trung bình trên tất cả các lớp (có hoặc không có trọng số) mang lại giá trị cho toàn bộ mô hình.


2
Bạn có trục của bạn lật. Dựa trên những gì bạn đã viết, CM của bạn sẽ được chuyển đổi.
Spacey

@Tarantula Tại sao bạn nghĩ vậy? Tôi nghĩ anh ấy đúng.
shahensha

@shahensha Hãy thử một cột, điều đó sai.
Spacey

1
Liên kết đến chuỗi Coursera bị hỏng
Shark8me

8
tôi không tin rằng câu trả lời này xử lý vấn đề đa nhãn. nó áp dụng cho các vấn đề đa lớp. Khái niệm về một âm tính giả hoặc âm tính giả trong các vấn đề đa nhãn là gì?
dùng798719

13

Để phân loại nhiều nhãn, bạn có hai cách để đi Trước tiên hãy xem xét các điều sau.

  • n
  • Yiith
  • xiith
  • h(xi)ith

Dựa trên ví dụ

Các số liệu được tính toán theo cách thức dữ liệu. Đối với mỗi nhãn dự đoán, chỉ có điểm của nó được tính và sau đó các điểm này được tổng hợp trên tất cả các điểm dữ liệu.

  • 1ni=1n|Yih(xi)||h(xi)|
  • 1ni=1n|Yih(xi)||Yi|

Có những số liệu khác là tốt.

Dựa trên nhãn

Ở đây những điều được thực hiện nhãn khôn ngoan. Đối với mỗi nhãn, các số liệu (ví dụ: độ chính xác, thu hồi) được tính toán và sau đó các số liệu thông minh về nhãn này được tổng hợp. Do đó, trong trường hợp này, bạn kết thúc việc tính toán độ chính xác / thu hồi cho mỗi nhãn trên toàn bộ tập dữ liệu, như bạn thực hiện để phân loại nhị phân (vì mỗi nhãn có gán nhị phân), sau đó tổng hợp nó.

Cách dễ dàng là trình bày các hình thức chung.

Đây chỉ là một phần mở rộng của tương đương nhiều lớp tiêu chuẩn.

  • 1qj=1qB(TPj,FPj,TNj,FNj)

  • B(j=1qTPj,j=1qFPj,j=1qTNj,j=1qFNj)

TPj,FPj,TNj,FNjjth

B

Bạn có thể quan tâm để có một cái nhìn vào mã cho các số liệu mult-nhãn ở đây , đó là một phần của gói mldr trong R . Ngoài ra, bạn có thể quan tâm đến việc xem xét thư viện đa nhãn Java MULAN .

Đây là một bài viết hay để đi vào các số liệu khác nhau: Đánh giá về các thuật toán học tập đa nhãn


Sẽ tốt hơn nếu bạn có thể đưa ra các tài liệu tham khảo liên quan đến tính xác thực của các số liệu mà bạn đã viết như một số tài liệu tham khảo trên wikipedia. Các tài liệu tham khảo mà bạn đã đề cập là phần mã hóa của số liệu hoặc tài liệu nghiên cứu ..
hacker315

2
Một bài đánh giá đã được liên kết ở cuối câu trả lời (Đánh giá về thuật toán học đa nhãn) ieeexplore.ieee.org/document/6471714 . Đây là những số liệu nổi tiếng trong tài liệu dựa trên đó việc thực hiện được thực hiện. Tôi không chắc làm thế nào tôi có thể chứng minh tính xác thực.
phoxis

8

Tôi không biết về phần đa nhãn nhưng đối với phân loại lớp mutli, các liên kết đó sẽ giúp bạn

Liên kết này giải thích cách xây dựng ma trận nhầm lẫn mà bạn có thể sử dụng để tính độ chính xác và thu hồi cho từng danh mục

liên kết này giải thích cách tính toán các biện pháp micro-F1 và macro-F1 để đánh giá toàn bộ phân loại.

Hy vọng rằng bạn thấy rằng hữu ích.


4
Điểm mấu chốt là: có nhiều cách hợp lệ có thể để tính các số liệu này (ví dụ: micro-F1 so với macro-F1) vì có nhiều cách để xác định điều gì là đúng. Điều này phụ thuộc vào ứng dụng và tiêu chí hợp lệ của bạn.
Jack Tanner

Ahmed: Cảm ơn các liên kết! @JackTanner Có lẽ bạn sẽ có một tài liệu tham khảo cho điều này (đối với trường hợp phân loại đa nhãn đa lớp)?
Vam

1
@MaVe, xin lỗi, không có liên kết. Đây chỉ là từ kinh nghiệm cá nhân. Bạn sẽ đến đó chỉ đơn giản bằng cách suy nghĩ về những gì cấu thành, nói, một tích cực thực sự và một tích cực sai cho mục đích của bạn.
Jack Tanner

4
Liên kết đầu tiên đã chết
Nikana Reklawyks

1

liên kết này đã giúp tôi .. https://www.youtube.com/watch?v=HBi-P5j0Kec tôi hy vọng nó cũng sẽ giúp bạn

nói phân phối như dưới đây

    A   B   C   D
A   100 80  10  10
B   0    9   0   1
C   0    1   8   1
D   0    1   0   9

độ chính xác cho A sẽ là

P (A) = 100/100 + 0 + 0 +0 = 100

P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... về cơ bản lấy tích cực thực sự của lớp và chia cho dữ liệu cột giữa các hàng

nhớ lại cho một

R (A) = 100 / 100+ 80 + 10 + 10 = 0,5

R (B) = 9 / 9+ 0 + 0 + 1 = 0,9

psst ... về cơ bản lấy tích cực thực sự của lớp và chia cho dữ liệu hàng trên các cột

một khi bạn nhận được tất cả các giá trị, lấy trung bình vĩ mô

avg (P) = P (A) + P (B) + P (C) + P (D) / 4

avg (R) = R (A) + R (B) + R (C) + R (D) / 4

F1 = 2 * avg (P) * avg (R) / avg (P) + avg (R)


0

Kiểm tra các slide này từ cs205.org tại Harvard . Khi bạn đến phần về Các biện pháp lỗi, sẽ có thảo luận về độ chính xác và thu hồi trong cài đặt nhiều lớp (ví dụ: một đấu một hoặc tất cả hoặc một đấu một) và ma trận nhầm lẫn. Ma trận nhầm lẫn là những gì bạn thực sự muốn ở đây.

FYI, trong gói phần mềm Python scikits.learn , có các phương thức tích hợp để tự động tính toán những thứ như ma trận nhầm lẫn từ các trình phân loại được đào tạo trên dữ liệu nhiều lớp. Nó có thể có thể trực tiếp tính toán các lô thu hồi chính xác cho bạn. Đáng xem.


4
Thật không may, liên kết đến các slide đã chết và tôi có thể tìm thấy các slide ở nơi khác.
f3lix

Nó sẽ bổ sung khi họ đến bài giảng đó trong khóa học năm nay. Nếu tôi có thể sao chép tệp PDF vào một vị trí liên kết cố định, tôi sẽ, nhưng tôi không thể, vì vậy việc phá vỡ định kỳ là không thể tránh khỏi và sẽ không có nơi nào khác để tìm ghi chú, chúng dành riêng cho khóa học đó.
ely

sklearn không hỗ trợ đa nhãn cho ma trận nhầm lẫn github.com/scikit-learn/scikit-learn/issues/3452
Franck Dernoncourt

0

Từ Ozgur et al (2005) có thể thấy rằng bạn nên tính Chính xác và Nhớ lại theo các biểu thức bình thường, nhưng thay vì tính trung bình trên tổng số N trường hợp trong tập dữ liệu của bạn, bạn nên sử dụng N = [trường hợp có ít nhất một nhãn với lớp trong câu hỏi được giao cho].

đây là tài liệu tham khảo được đề cập: http://citeseerx.ist.psu.edu/viewdoc/doad?doi=10.1.1.104.8244&rep=rep1&type=pdf


0

Chính xác giống như cách bạn sẽ làm trong trường hợp chung, với các bộ:

http://en.wikipedia.org/wiki/F1_score

http://en.wikipedia.org/wiki/Precision_and_recall

Dưới đây là các hàm Python đơn giản thực hiện chính xác điều đó:

def precision(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    len1 = len(y_pred)
    if len1 == 0:
        return 0
    else:
        return len(i) / len1


def recall(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    return len(i) / len(y_true)


def f1(y_true, y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true, y_pred)
    if p + r == 0:
        return 0
    else:
        return 2 * (p * r) / (p + r)


if __name__ == '__main__':
    print(f1(['A', 'B', 'C'], ['A', 'B']))
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.