Ефективний алгоритм для обчислення кривої ROC для класифікатора, що складається з ансамблю роз'єднаних класифікаторів


13

Припустимо, у мене є класифікатори C_1 ... C_n, які не роз'єднуються в тому сенсі, що жодне двоє не поверне істину на одному вході (наприклад, вузли в дереві рішення). Я хочу створити новий класифікатор, який є об'єднанням якогось підмножини (наприклад, я хочу визначити, які листя дерева рішень даватимуть позитивну класифікацію). Звичайно, при цьому відбудеться компроміс між чутливістю та позитивною прогностичною цінністю. Тому я хотів би бачити криву ROC. В принципі, я міг би це зробити, перерахувавши всі підмножини класифікаторів і обчисливши отриману чутливість та PPV. Однак це надзвичайно дорого, якщо n більше 30 або більше. З іншого боку, майже напевно є деякі комбінації, які не є оптимальними для Парето, тому може бути якась галузева та зв'язана стратегія, чи щось,

Мені б хотілося поради щодо того, чи може цей підхід бути плідним і чи є якась робота чи чи є у вас ідеї щодо ефективного обчислення кривої ROC у вищезгаданій ситуації.


Ви класифікуєте кожний випадок введення як істинний, так і хибний?
image_doctor

@image_doctor: так
Джош Браун Крамер

Мені "не зрозуміло", ... які не розходяться в тому сенсі, що жодне двоє не повернеться істинним на одному вході ... ", і ви класифікуєте бінарний вихід, як у вас може бути більше двох класифікаторів у вашому ансамблю, я, мабуть, чогось не
вистачаю

@image_doctor: Ви можете думати, що я кажу, що жоден два класифікатори не повертають однаковий вихід на одному вході. Я кажу, що жодне двоє не повернеться правдою. Вони можуть обидва повернути помилкові.
Джош Браун Крамер

1
Можливо, цей документ про теоретично оптимальний спосіб поєднання класифікаторів для ROC (або документи, які цитують це) може допомогти вам зрозуміти стан мистецтва: М. Баррено, А. Карденас, Дж. Д. Тігар, Оптимальна крива ROC для поєднання класифікаторів, Успіхи в системах обробки нейронної інформації, 2008.
Валентас

Відповіді:


1

N10

Це дуже схоже на проблему з рюкзаком ! Розміри кластерів - "ваги", а кількість позитивних зразків у кластері - "значення", і ви хочете заповнити мішечок фіксованої ємності якомога більшим значенням.

valueweightkk0N

1k1p[0,1]k

Ось приклад пітона:

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();

Цей код намалюватиме вам приємну картину:

TPR, FPR і оптимальна крива

210

А тепер трохи солі: вам не довелося взагалі турбуватися про підмножини ! Що я зробив, то сортував листя дерева за часткою позитивних зразків у кожному. Але що я отримав - це саме крива ROC для ймовірнісного прогнозу дерева. Це означає, що ви не можете перевершити дерево, вибравши його листя вручну, виходячи з цільових частот у навчальному наборі.

Ви можете розслабитися і продовжувати використовувати звичайний імовірнісний прогноз :)


Чудова ідея. В теорії все ще може бути експоненціально багато можливих цифр "позитивних дзвінків", але на практиці це, мабуть, не є проблемою.
Валентас

Чому експоненціальна кількість дзвінків? Я обчислюю значення / вагу для кожного кластеру (займає лінійний час), сортую їх (N * log (N)) і оцінюю TPR та FPR для кожного першого кластеру K (можна також зробити лінійним).
Девід Дейл

Ви вирішуєте ранець для кожного можливого значення позитивних прогнозів, і існує експоненціальна кількість підмножин. Але це теоретична технічність, якщо запитати спеціально точки всередині опуклого корпусу, що не цікаво - це має бути прийнята відповідь.
Валентас

@Valentas, гаразд, я бачу вашу думку. Але все ж, якщо ви даєте випадковий прогноз у деяких листках, ви можете дістатися до будь-якої точки опуклого корпусу. Тож у цьому випадку корпус - це сама РПЦ.
Девід Дейл

@DavidDale, підводячи підсумок: 1) Кожна стратегія, яка є парето оптимальною щодо (чутливості, PPV), максимізує кількість справжніх позитивних результатів серед стратегій із такою кількістю позитивних прогнозів. 2) Це проблема з рюкзаком. 3) Вибір вузлів у порядку кількості позитивних прикладів / кількості прикладів, як відомо, є хорошим приблизним рішенням проблеми з ранцем. 4) Але це точно так само, як вибір порогу ймовірностей.
Джош Браун Крамер

0

Я можу запропонувати вам використовувати жадібні методи. Дайте класифікатору почати, ви включите класифікатор, завдяки якому ансамбль отримає найкраще підвищення продуктивності. Якщо покращення не вдалося отримати, включіть більше класифікаторів, тоді зупиніться. Ви почнете з усіх класифікаторів. Складність буде не більше N * N.

У мене є ще одне запитання, що ви маєте на увазі під «Парето оптимальним», особливо у вашому контексті? Я знайшов із вікі таке пояснення, https://en.wikipedia.org/wiki/Pareto_efficiency

шляхом перерозподілу можна покращити добробут хоча б одного учасника, не знижуючи добробуту іншого учасника.

Поліпшення ефективності Pareto - це для кожного учасника, що може відповідати кожному класифікатору. Як ви визначаєте покращення над одним класифікатором?


1
Я маю на увазі це так: якщо у мене ансамблі 1 і 2, з (чутливість, позитивне прогнозне значення) = (.90, .80) і (.97, .93) відповідно, 1 не є оптимальним для Парето, тому що є ще один ансамбль, а саме 2, який всіляко б’є його. Що стосується запропонованого алгоритму: існує компроміс між чутливістю та PPV, тому "ансамбль отримує найкраще підвищення продуктивності" недостатньо визначений.
Джош Браун Крамер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.