k-NN против дерева решений
Я всегда нахожу, что картина - лучший способ понять интуицию алгоритма. Предложенная вами целевая функция может привести к тому, что набор данных будет выглядеть примерно так:
Где функция для разделения данных имеет вид x1 - x2 = 0. Проблема в том, что обычно деревья решений имеют функции только одной переменной в узлах, поэтому функции принятия решений в узлах выровнены по оси. Я представляю, что дерево решений, изученное на этом наборе данных, будет делать что-то вроде этого:
Надеюсь, вы поняли идею, очевидно, вы можете приблизить оптимальную границу решения, выполнив это с достаточным количеством узлов в дереве решений, но это означает, что вы рискуете перегрузить данные.
На самом деле, я сказал, что деревья решений обычно используют функции с одной переменной на узлах, но есть другой подход, описанный в вопросе StackOverflow о многомерных деревьях решений (на которые я не смог ответить).
Кстати, лучшим классификатором для такого рода данных был бы линейный классификатор, возможно, логистическая регрессия, который бы нашел оптимальную границу решения
Эффект k в к-нн
Лучшее описание, которое я могу дать для k в k-ближайшем соседе, состоит в том, что высокие значения k сглаживают границу решения. Это также не тот случай, когда более высокое k всегда лучше, чем более низкое.
Чтобы подумать о k-NN, нам нужен более сложный набор данных. Для k = 1 модель k-NN может принимать решения, подобные следующим:
Если бы мы увеличили значение k, на решения повлияло бы большее соседство точек, и поэтому границы решений стали бы более плавными. В частности, эти маленькие красно-синие острова будут поражены окружающими точками данных:
Лучше ли использовать высокое k, зависит от уровня шума в наборе данных. Были ли эти маленькие островки действительно важными, и мы выучили слишком простую модель, которая не очень хорошо вписывается в данные, или это был просто шум, и мы избежали переобучения?
Практическая перспектива
К сожалению, учитывая большой, сложный набор данных реального мира, у вас, вероятно, нет очень хорошей основы для определения того, какой алгоритм будет работать лучше (если вы не опираетесь на предыдущую работу с теми же или похожими данными). Большинство людей тщательно разбивают данные на обучающие, настраиваемые параметры и тестовые наборы, а затем запускают столько алгоритмов, сколько могут придумать. Вы также можете обнаружить, что ваша конкретная ситуация определяет некоторые свойства, которыми должен обладать алгоритм (быстрый, инкрементный, вероятностный и т. Д.)