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
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
Signification que les deux mon point 2 et le point 3 sont des méthodes légitimes? – browser
@browser Yep c'est vrai :) – nitheism