2016-11-16 2 views
4

Я пытаюсь выполнить свой первый 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 (или что-то подобное) для точной настройки параметров.

Заранее спасибо

ответ

5
  1. Да, вы можете CV на весь набор данных он жизнеспособен, но я все еще предлагаю вам, по крайней мере разделить ваши данные в 2 комплекта один для CV и один для тестирования.

  2. .score функция должна возвращать одно float значения в соответствии с documentation, который партитурой best estimator (который является лучшим забил оценщик вы получите от установки вашего GridSearchCV) на данном X, Y

  3. Если вы видели, что лучший параметр - 14, то да, вы можете использовать его в своей модели, но если вы дали ему больше параметров, вы должны установить их все. (- Я говорю это, потому что вы не указали свой список параметров). И да, законно проверять ваше резюме еще раз, если эта модель так же хороша, как и должна.

Надежда, что делает вещи яснее :)

+0

Так на самом деле, когда я использую clf.score (X, Y) в пункте 2, что является достижение того, что я хочу - перекрестную проверены классификатором, используя все данные , Если я перейду к использованию cross_val_score (knn2, X, Y, cv = 5) с лучшим параметром (да, есть только один), который будет дважды проверять CV, как вы указали в своей точке 3. – browser

+0

Это означает, что оба моя точка 2 и пункт 3 являются законными методами? – browser

+0

@browser Да, это правильно :) – nitheism

Смежные вопросы