Ответы:
На концептуальном уровне
Подгонка классификатора означает принятие набора данных в качестве входных данных, а затем вывод классификатора, который выбирается из пространства возможных классификаторов. Во многих случаях классификатор идентифицируется - то есть отличается от других возможных классификаторов - набором параметров. Параметры обычно выбираются путем решения задачи оптимизации или некоторой другой численной процедуры. Но в случае knn классификатор идентифицируется самими данными обучения. Таким образом, на абстрактном уровне для подбора классификатора knn просто необходимо сохранить обучающий набор.
На уровне реализации
Оценка классификатора knn для новой точки данных требует поиска ближайших соседей в обучающем наборе, что может быть дорогостоящей операцией, когда обучающий набор велик. Как упомянул RUser, существуют различные приемы для ускорения этого поиска, которые обычно работают путем создания различных структур данных на основе обучающего набора. Общая идея заключается в том, что некоторые вычислительные работы, необходимые для классификации новых точек, на самом деле являются общими для всех точек. Таким образом, эту работу можно выполнить заранее, а затем использовать повторно, а не повторять для каждого нового экземпляра. Кнн-реализация, использующая эти приемы, сделает эту работу на этапе обучения. Например, scikit-learn может создавать kd-деревья или шаровые деревья во время вызова fit()
функции.
Вы можете реализовать это ленивым способом, и это делает достойное упражнение при изучении языка. (см. пример одного из моих постов в блоге ). Но вы также можете индексировать данные, чтобы сделать прогноз (намного быстрее).
Если бы пространство пространственных объектов имело размерность один, сортировка точек в соответствии с этой функцией поможет вам найти соседей намного быстрее (используя, например, дихотомический поиск). В большем измерении нет естественного обобщения сортировки, но вы можете индексировать точки, используя (для каждого примера) квадраты .
Глядя на источник , вы можете увидеть, что в scikit learn были реализованы различные методы. И есть некоторые исследования , которые продолжают улучшать эти запросы ближайших соседей.
Хотя высказанные другими авторами замечания, безусловно, верны и интересны, я хотел бы отметить еще одну вещь с точки зрения разработки программного обеспечения:
Чтобы это соответствовало их API
Оценщики sklearn должны, среди прочего, иметь fit
метод, который принимает один или два аналога массива (в зависимости от того, является ли он оценщиком под надзором / без присмотра) и ряд деталей, специфичных для реализации ( Источник ).
Таким образом, даже если бы fit
метод knn никогда не делал абсолютно ничего, он, вероятно, все еще существовал бы, потому что knn является оценщиком, и разработчики sklearn, а также код, который они вносят, ожидают, что оценщики будут иметь fit
метод.