2016-11-16 1 views
4

Je suis en train d'effectuer ma première KNN classificateur à l'aide scikit-learn. J'ai suivi le Guide de l'utilisateur et d'autres exemples en ligne, mais il y a quelques choses dont je ne suis pas sûr. Pour ce poste permet d'utiliser les éléments suivantsparamètre Grille de recherche et des données croisées validées définies dans classificateur KNN à scikit-learn

X = données Y = cible

1) Dans la plupart introduction aux pages d'apprentissage de la machine que je l'ai lu, il semble dire que vous voulez un ensemble de formation, un ensemble de validation, et un ensemble de test. D'après ce que je comprends, la validation croisée vous permet de combiner les ensembles d'entraînement et de validation pour former le modèle, puis vous devez le tester sur l'ensemble de test pour obtenir un score. Cependant, j'ai vu dans des articles que dans de nombreux cas, vous pouvez simplement valider l'ensemble de l'ensemble des données et ensuite rapporter le résultat du CV comme étant l'exactitude. Je comprends dans un monde idéal que vous voulez tester sur des données distinctes, mais si cela est légitime, je voudrais contrevalider sur mon ensemble de ces données et de faire rapport les scores

2) Ainsi, à partir du processus

je définis mon KNN classificateur comme suit

knn = KNeighborsClassifier(algorithm = 'brute') 

Je recherche des meilleures n_neighbors en utilisant

clf = GridSearchCV(knn, parameters, cv=5) 

maintenant, si je dis

clf.fit(X,Y) 

Je peux vérifier le meilleur paramètre à l'aide

clf.best_params_ 

puis je peux obtenir un score

clf.score(X,Y) 

Mais - si je comprends bien, cela n'a pas validé le a contre modèle, comme il donne seulement 1 score?

Si je l'ai vu clf.best_params_ = 14 maintenant pourrais-je aller sur

knn2 = KNeighborsClassifier(n_neighbors = 14, algorithm='brute') 
cross_val_score(knn2, X, Y, cv=5) 

Maintenant, je sais que les données ont été validées, mais je croix ne sais pas s'il est légitime d'utiliser clf.fit à trouver le meilleur paramètre, puis utiliser cross_val_score avec un nouveau modèle knn?

3) Je comprends que le 'bon' façon de le faire serait la suivante

Split à X_train, X_test, Y_train, Y_test, ensembles de trains d'échelle -> Se transformer pour tester ensembles

knn = KNeighborsClassifier(algorithm = 'brute') 
clf = GridSearchCV(knn, parameters, cv=5) 
clf.fit(X_train,Y_train) 
clf.best_params_ 

et je peux obtenir un score

clf.score(X_test,Y_test) 

Dans ce cas, le score est calculé en utilisant le meilleur paramètre?


J'espère que cela a du sens. J'ai essayé de trouver autant que je peux sans poster mais je suis arrivé au point où je pense qu'il serait plus facile d'obtenir des réponses directes.

Dans ma tête, j'essaie d'obtenir des scores validés croisés en utilisant l'ensemble des données, mais aussi d'utiliser une recherche de grille (ou quelque chose de similaire) pour affiner les paramètres.

Merci à l'avance

Répondre

5
  1. Oui vous pouvez CV sur votre ensemble de ces données, il est viable, mais je vous suggère encore au moins diviser vos données en 2 ensembles pour un CV et un pour les tests.

  2. La fonction .score est censé renvoyer une seule valeur float selon la documentation qui est le score de l'best estimator (ce qui est le meilleur estimateur marqué que vous obtenez de montage de votre GridSearchCV) sur le X donné, Y

  3. Si vous avez vu que le meilleur paramètre est 14 que oui, vous pouvez continuer à l'utiliser dans votre modèle, mais si vous lui avez donné plus de paramètres, vous devriez tous les paramétrer. (- Je dis cela parce que vous n'avez pas donné votre liste de paramètres) Et oui, il est légitime de vérifier à nouveau votre CV juste au cas où ce modèle est aussi bon qu'il le devrait.

espoir qui rend les choses plus claires :)

+0

Alors, vraiment, quand j'utilise clf.score (X, Y) au point 2 qui obtient ce que je veux - un classificateur de validation croisée en utilisant toutes les données . Si je continue à utiliser cross_val_score (knn2, X, Y, cv = 5) avec le meilleur paramètre (oui, il y en a juste un) qui serait double vérification du CV comme vous l'avez souligné dans votre point 3. – browser

+0

Signification que les deux mon point 2 et le point 3 sont des méthodes légitimes? – browser

+0

@browser Yep c'est vrai :) – nitheism