Я пытаюсь выполнить свой первый KNN-классификатор с помощью SciKit-Learn. Я слежу за Руководством пользователя и другими онлайн-примерами, но есть некоторые вещи, о которых я не уверен. Для этой записи позволяет использовать следующиеПараметры поиска сетки и кросс-проверенные данные, установленные в KNN-классификаторе в Scikit-learn
X = данные Y = целевую
1) В большинстве случаев введения в машинных страницах обучения, которые я читал, кажется, что вы хотите обучающий набор, набор проверки, и набор тестов. Насколько я понимаю, перекрестная проверка позволяет объединить комплекты обучения и валидации для обучения модели, а затем вы должны проверить ее на тестовом наборе, чтобы получить оценку. Тем не менее, я видел в документах, что во многих случаях вы можете просто переквалифицировать проверку на весь набор данных, а затем сообщить о результатах оценки CV как точности. Я понимаю, в идеальном мире вы хотели бы проверить на отдельных данных, но если это законно, я хотел бы перекрестную проверку на весь мой набор данных, и сообщать эти результаты
2) Таким образом, начиная процесс
я определяю мой КНН Классификатор следующего
knn = KNeighborsClassifier(algorithm = 'brute')
Я поиск лучших N_NEIGHBORS использования
clf = GridSearchCV(knn, parameters, cv=5)
Теперь, если я скажу
clf.fit(X,Y)
я могу проверить, лучший параметр, используя
clf.best_params_
, а затем я могу получить счет
clf.score(X,Y)
Но - как я понимаю, это не крест проверенную модель, так как он дает только 1 балл?
Если я видел clf.best_params_ = 14 Теперь я мог пойти на
knn2 = KNeighborsClassifier(n_neighbors = 14, algorithm='brute')
cross_val_score(knn2, X, Y, cv=5)
Теперь я знаю, что данные были проверены крест, но я не знаю, если это законно использовать clf.fit для найти лучший параметр, а затем использовать cross_val_score с новой моделью knn?
3) Я понимаю, что 'правильный' способ сделать это будет выглядеть следующим образом
Сплит X_train, X_test, Y_train, Y_test, Масштабные поезд наборы -> применить преобразование, чтобы проверить наборы
knn = KNeighborsClassifier(algorithm = 'brute')
clf = GridSearchCV(knn, parameters, cv=5)
clf.fit(X_train,Y_train)
clf.best_params_
, а затем я могу получить счет
clf.score(X_test,Y_test)
В этом случае, оценка рассчитывается лучший параметр?
Я надеюсь, что это имеет смысл. Я пытался найти столько, сколько я могу, не публикуя, но я пришел к тому, что, по-моему, было бы проще получить некоторые прямые ответы.
В моей голове я пытаюсь получить несколько перекрестных подтверждений, используя весь набор данных, но также использую gridsearch (или что-то подобное) для точной настройки параметров.
Заранее спасибо
Так на самом деле, когда я использую clf.score (X, Y) в пункте 2, что является достижение того, что я хочу - перекрестную проверены классификатором, используя все данные , Если я перейду к использованию cross_val_score (knn2, X, Y, cv = 5) с лучшим параметром (да, есть только один), который будет дважды проверять CV, как вы указали в своей точке 3. – browser
Это означает, что оба моя точка 2 и пункт 3 являются законными методами? – browser
@browser Да, это правильно :) – nitheism