Предположим, у меня есть классификаторы C_1 ... C_n, которые не пересекаются в том смысле, что никакие два не вернут истину на одном входе (например, узлы в дереве решений). Я хочу создать новый классификатор, который объединяет некоторые их подмножества (например, я хочу решить, какие листья дерева решений дать положительную классификацию). Конечно, при этом будет достигнут компромисс между чувствительностью и положительной прогностической ценностью. Поэтому я хотел бы видеть кривую ROC. В принципе, я мог бы сделать это путем перечисления всех подмножеств классификаторов и вычисления результирующей чувствительности и PPV. Однако это непомерно дорого, если n больше 30 или около того. С другой стороны, почти наверняка есть некоторые комбинации, которые не являются оптимальными по Парето, поэтому может быть какая-то стратегия ветвления и ограничения или что-то в этом роде,
Я хотел бы получить совет о том, будет ли этот подход плодотворным и есть ли какая-либо работа или есть ли у вас какие-либо идеи относительно эффективного вычисления кривой ROC в описанной выше ситуации.
источник
Ответы:
Это очень похоже на проблему с рюкзаком ! Размеры кластера - это «веса», а количество положительных выборок в кластере - это «значения», и вы хотите наполнить свой рюкзак фиксированной емкости как можно большим значением.
Вот пример Python:
Этот код нарисует красивую картинку для вас:
А теперь немного соли: вам совсем не нужно было беспокоиться о подмножествах ! Я отсортировал листья деревьев по доле положительных образцов в каждом. Но то, что я получил, это точно кривая ROC для вероятностного предсказания дерева. Это означает, что вы не можете превзойти дерево, вручную подбирая его листья на основе целевых частот в тренировочном наборе.
Вы можете расслабиться и продолжать использовать обычный вероятностный прогноз :)
источник
Я мог бы предложить вам использовать жадные методы. Дайте классификатору для начала, вы включите классификатор, который заставит ансамбль получить лучшее улучшение производительности. Если нельзя добиться улучшения, включите больше классификаторов, затем остановитесь. Вы начнете с каждого классификатора. Сложность будет не более N * N.
У меня есть еще один вопрос: что вы подразумеваете под «оптимальным по Парето», особенно в вашем контексте? Я нашел в вики это объяснение, https://en.wikipedia.org/wiki/Pareto_efficiency
Повышение эффективности Парето касается каждого участника, который может соответствовать каждому классификатору. Как вы определяете улучшение по одному классификатору?
источник