Thuật toán hiệu quả để tính toán đường cong ROC cho một bộ phân loại bao gồm một tập hợp các phân loại rời rạc


13

Giả sử tôi có các trình phân loại C_1 ... C_n không khớp nhau theo nghĩa là không có hai sẽ trả về true trên cùng một đầu vào (ví dụ: các nút trong cây quyết định). Tôi muốn xây dựng một bộ phân loại mới là sự kết hợp của một số tập hợp con trong số này (ví dụ: tôi muốn quyết định lá nào của cây quyết định sẽ đưa ra phân loại tích cực). Tất nhiên, khi làm như vậy sẽ có sự đánh đổi giữa độ nhạy và giá trị tiên đoán tích cực. Vì vậy, tôi muốn thấy một đường cong ROC. Về nguyên tắc tôi có thể làm điều này bằng cách liệt kê tất cả các tập hợp con của bộ phân loại và tính toán độ nhạy kết quả và PPV. Tuy nhiên, điều này là cực kỳ tốn kém nếu n lớn hơn 30 hoặc hơn. Mặt khác, gần như chắc chắn có một số kết hợp không tối ưu Pareto, do đó, có thể có một số chiến lược chi nhánh và ràng buộc, hoặc một cái gì đó,

Tôi muốn lời khuyên về cách tiếp cận này có khả năng mang lại kết quả hay không và liệu có bất kỳ công việc nào hoặc nếu bạn có bất kỳ ý tưởng nào về việc tính toán hiệu quả đường cong ROC trong tình huống trên.


Bạn đang phân loại từng trường hợp đầu vào là đúng hay sai?
image_doctor

@image_doctor: có
Josh Brown Kramer

Tôi không rõ, "... không phù hợp theo nghĩa là không có hai cái nào trả về đúng trên cùng một đầu vào ..." và bạn đang phân loại thành đầu ra nhị phân, làm thế nào bạn có thể có nhiều hơn hai phân loại trong Đồng phục, có lẽ tôi đang thiếu thứ gì đó?
image_doctor

@image_doctor: Bạn có thể nghĩ rằng tôi đang nói rằng không có hai phân loại trả về cùng một đầu ra trên cùng một đầu vào. Tôi đang nói không có hai sẽ trở lại đúng sự thật. Cả hai đều có thể trả về false.
Josh Brown Kramer

1
Có lẽ bài viết này về cách kết hợp các phân loại tối ưu về mặt lý thuyết cho ROC (hoặc các tài liệu trích dẫn nó) có thể giúp bạn hiểu được trạng thái của nghệ thuật: M. Barreno, A. Cardenas, JD Tygar, Đường cong ROC tối ưu cho sự kết hợp của phân loại, Những tiến bộ trong hệ thống xử lý thông tin thần kinh, 2008
Valentas

Câu trả lời:


1

Nếu tôi hiểu chính xác câu hỏi, bạn đã đào tạo một thuật toán phân chia dữ liệu của bạn thành cụm rời rạc. Bây giờ bạn muốn gán dự đoán cho một số tập hợp con của cụm và cho phần còn lại của chúng. Và không phải là các tập hợp con đó, bạn muốn tìm các tập hợp tối ưu pareto, tức là những tập hợp tối đa hóa tỷ lệ dương thực sự với số lượng dự đoán dương cố định (điều này tương đương với việc sửa PPV). Nó có đúng không?1 0N10

Điều này nghe có vẻ rất giống như vấn đề ba lô ! Kích thước cụm là "trọng số" và số lượng mẫu dương trong một cụm là "giá trị" và bạn muốn lấp đầy chiếc ba lô có công suất cố định với càng nhiều giá trị càng tốt.

Vấn đề về chiếc ba lô có một số thuật toán để tìm giải pháp chính xác (ví dụ: bằng lập trình động). Nhưng một giải pháp tham lam hữu ích là sắp xếp các cụm của bạn theo thứ tự giảm dần (nghĩa là chia sẻ các mẫu dương tính) và lấy đầu tiên . Nếu bạn lấy từ đến , bạn có thể phác họa đường cong ROC của mình rất rẻ. kk0Nvalueweightkk0N

Và nếu bạn chỉ định cho các cụm đầu tiên và cho phân số ngẫu nhiên của các mẫu trong cụm thứ , bạn sẽ có được giới hạn trên cho vấn đề về chiếc ba lô. Với điều này, bạn có thể vẽ giới hạn trên cho đường cong ROC của mình.k - 1 p [ 0 , 1 ] k1k1p[0,1]k

Dưới đây là một ví dụ về con trăn:

import numpy as np
from itertools import combinations, chain
import matplotlib.pyplot as plt
np.random.seed(1)
n_obs = 1000
n = 10

# generate clusters as indices of tree leaves
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_predict
X, target = make_classification(n_samples=n_obs)
raw_clusters = DecisionTreeClassifier(max_leaf_nodes=n).fit(X, target).apply(X)
recoding = {x:i for i, x in enumerate(np.unique(raw_clusters))}
clusters = np.array([recoding[x] for x in raw_clusters])

def powerset(xs):
    """ Get set of all subsets """
    return chain.from_iterable(combinations(xs,n) for n in range(len(xs)+1))

def subset_to_metrics(subset, clusters, target):
    """ Calculate TPR and FPR for a subset of clusters """
    prediction = np.zeros(n_obs)
    prediction[np.isin(clusters, subset)] = 1
    tpr = sum(target*prediction) / sum(target) if sum(target) > 0 else 1
    fpr = sum((1-target)*prediction) / sum(1-target) if sum(1-target) > 0 else 1
    return fpr, tpr

# evaluate all subsets
all_tpr = []
all_fpr = []
for subset in powerset(range(n)):
    tpr, fpr = subset_to_metrics(subset, clusters, target)
    all_tpr.append(tpr)
    all_fpr.append(fpr)

# evaluate only the upper bound, using knapsack greedy solution
ratios = [target[clusters==i].mean() for i in range(n)]
order = np.argsort(ratios)[::-1]
new_tpr = []
new_fpr = []
for i in range(n):
    subset = order[0:(i+1)]
    tpr, fpr = subset_to_metrics(subset, clusters, target)
    new_tpr.append(tpr)
    new_fpr.append(fpr)

plt.figure(figsize=(5,5))
plt.scatter(all_tpr, all_fpr, s=3)
plt.plot(new_tpr, new_fpr, c='red', lw=1)
plt.xlabel('TPR')
plt.ylabel('FPR')
plt.title('All and Pareto-optimal subsets')
plt.show();

Mã này sẽ vẽ một bức tranh đẹp cho bạn:

TPR, FPR và đường cong tối ưu

Các dấu chấm màu xanh là các bộ dữ liệu (FPR, TPR) cho tất cả các tập con và đường màu đỏ kết nối (FPR, TPR) cho các tập hợp con tối ưu pareto.210

Và bây giờ là một chút muối: bạn hoàn toàn không phải bận tâm về các tập con ! Những gì tôi đã làm là sắp xếp lá cây theo tỷ lệ mẫu dương tính trong mỗi mẫu. Nhưng những gì tôi nhận được chính xác là đường cong ROC cho dự đoán xác suất của cây. Điều này có nghĩa là, bạn không thể vượt trội hơn cây bằng cách tự tay hái lá dựa trên tần số mục tiêu trong tập huấn luyện.

Bạn có thể thư giãn và tiếp tục sử dụng dự đoán xác suất thông thường :)


Ý tưởng tuyệt vời. Về lý thuyết, vẫn có thể có nhiều số "cuộc gọi tích cực" theo cấp số nhân, nhưng trong thực tế, nó có lẽ không phải là vấn đề.
Valentas

Tại sao số lượng cuộc gọi theo cấp số nhân? Tôi tính giá trị / trọng lượng cho từng cụm (mất thời gian tuyến tính), sắp xếp chúng (N * log (N)) và đánh giá TPR và FPR cho từng cụm K đầu tiên (cũng có thể được tạo tuyến tính).
David Dale

Bạn giải quyết được ba lô cho mỗi giá trị có thể có của các dự đoán tích cực và có số lượng tập con theo cấp số nhân. Nhưng đây là một kỹ thuật lý thuyết nếu bạn hỏi cụ thể về các điểm bên trong thân tàu lồi, điều này không thú vị - đây sẽ là câu trả lời được chấp nhận.
Valentas

@Valentas, OK, tôi thấy quan điểm của bạn. Tuy nhiên, nếu bạn đưa ra dự đoán ngẫu nhiên ở một số lá, bạn có thể đến bất kỳ điểm nào trong thân tàu lồi. Vì vậy, trong trường hợp này thân tàu là chính ROC.
David Dale

@DavidDale, để tóm tắt: 1) Mọi chiến lược được tối ưu hóa tương ứng với (độ nhạy, PPV) tối đa hóa số lượng tích cực thực sự trong số các chiến lược với số lượng dự đoán tích cực đó. 2) Đây là vấn đề ba lô. 3) Chọn các nút theo thứ tự số lượng ví dụ tích cực / số ví dụ được biết là một giải pháp gần đúng cho vấn đề ba lô. 4) Nhưng điều đó cũng giống như chọn một ngưỡng về xác suất.
Josh Brown Kramer

0

Tôi có thể đề nghị bạn sử dụng một phương pháp tham lam. Đưa ra một bộ phân loại để bắt đầu, bạn sẽ bao gồm bộ phân loại làm cho bộ đồng phục có được sự cải thiện hiệu suất tốt nhất. Nếu không có cải thiện có thể được thông qua bao gồm nhiều phân loại hơn, sau đó dừng lại. Bạn sẽ bắt đầu với mọi phân loại. Độ phức tạp sẽ nhiều nhất là N * N.

Tôi có thêm một câu hỏi, "Pareto tối ưu" nghĩa là gì, đặc biệt là trong bối cảnh của bạn? Tôi tìm thấy từ wiki lời giải thích này, https://en.wikipedia.org/wiki/Pareto_effic

thông qua việc tái phân bổ, các cải tiến có thể được thực hiện cho ít nhất một người tham gia mà không làm giảm sức khỏe của người tham gia khác.

Sự cải thiện về hiệu quả Pareto dành cho từng người tham gia, có thể tương ứng với từng phân loại. Làm thế nào để bạn xác định cải tiến trên một phân loại?


1
Ý tôi là thế này: nếu tôi có 1 và 2, với (độ nhạy, giá trị tiên đoán dương) = (.90, .80) và (.97, .93), thì 1 không tối ưu Pareto, vì có một nhóm khác, cụ thể là 2, đánh bại nó theo mọi cách. Về thuật toán đề xuất của bạn: có sự đánh đổi giữa độ nhạy và PPV, do đó, "bản hòa tấu có được sự cải thiện hiệu suất tốt nhất" không được xác định rõ.
Josh Brown Kramer
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.