в догонку по kNN - почему он иногда лучше. kNN хорошо работает на кластеризованных данных. например, классификация точке на плоскости, если они расположены компактно кучками, то kNN различит их легко, правда и GB тоже их различит, построит ограничивающие гиперповерхности. Но если допустим на границах кластеров появятся точки другого класса, то kNN тупо присвоит им неправильную метку, и всё, модель не изменится (потому там нет модели, kNN ничего не запоминает). а бустинг попытается выцепить эти пограничные точки, чем сильно искривит ограничивающие поверхности, что приведёт к переобучению.