#machine-learning #scikit-learn #knn #training-data
#машинное обучение #scikit-learn #knn #обучение-данные
Вопрос:
Поскольку kNN обрабатывает как обучение, так и прогнозирование на уровне оперативной памяти и не требует явного процесса обучения, что именно происходит при подгонке модели knn? Я думал, что этот шаг связан с обучением модели. Спасибо.
Вот ошибка, которую я получу, если пропущу шаг подгонки.
NotFittedError: This KNeighborsClassifier instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
Пример кода:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
f=r"aug_train.csv"
df=pd.read_csv(f)
X=df[:90000][["training_hours", "city_development_index"]].values
y=df[:90000]["target"].values
X_train, X_test, y_train, y_test=train_test_split(X,y)
knn=KNeighborsClassifier(n_neighbors=2)
knn.fit(X_train, y_train)
yhat=knn.predict(X_test)
print(yhat)
Ответ №1:
В отличие от других алгоритмов машинного обучения, KNN не оптимизирует функцию затрат, вместо этого он запоминает обучающие данные. Когда выполняется прогноз, KNN сравнивает входные данные с данными обучения, которые он сохранил. Метка класса точки данных, которая имеет максимальное сходство с запрошенными входными данными, задается как прогноз. Следовательно, когда мы подгоняем модель KNN, она изучает или сохраняет набор данных в памяти.
Комментарии:
1. При необходимости также создается более эффективная структура данных для прогнозирования во время подгонки (см. Параметр
algorithm
).2. @BenReiniger Да, технически поиск в массиве может занять от O (n) до O (n ^ 2) времени, поэтому, чтобы сократить время, KNN строит KD-дерево, что снижает скорость до O (nlogn).
3. @BenReiniger По умолчанию scikit-learn использует ball tree(модификацию KDTree).