Lorsque vous tracez des données de train sur un plan et testez certaines données de test't ', étiquetez les données de test't' sur le plan avec les valeurs les plus fréquentes de K points proches de ce point t. .. C'est la méthode du voisinage K. (Bien que j'utilise des avions autres que des avions, j'utiliserai ici des avions faciles à comprendre pour expliquer le concept.) C'est un peu difficile, alors je vais emprunter un diagramme de Wikipedia.
Extracted from Wikipedia
Étiquetez les points verts en fonction des K points les plus proches. Ce à quoi je veux faire attention ici, c'est la variable K, qui est K points. Par exemple, dans la figure ci-dessus Si K = 3, 2 points rouges et 1 point bleu seront étiquetés en rouge. Si K = 5, 2 points rouges et 3 points bleus seront étiquetés comme bleus, et le point vert sera étiqueté comme bleu.
Dans le cas ci-dessus, si les points rouges et bleus sont séparés dans une certaine mesure, la méthode de voisinage K fonctionnera bien. Cependant, au contraire, les points rouges et bleus ne sont pas particulièrement séparés, et si les données sont un mélange de points rouges et bleus, ce n'est pas une bonne idée d'utiliser la méthode de voisinage K.
――Et si vous augmentez le nombre de K, par exemple, si le nombre de points rouges est anormalement grand par rapport au nombre de points bleus, la probabilité d'être classé comme rouge sera également anormalement grande. Par conséquent, vous devez faire attention au rapport entre les points rouges et bleus.
python
from sklearn.neighbors import KNeighborsClassifier
KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto',
leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1, **kwargs)
Le paramètre le plus important est peut-être n_neighbors décrit ci-dessus, et le code ci-dessous vous donnera le nombre optimal de K points à considérer.
python
#Faites une liste de nombres à mettre en K K
myList = list(range(1,50))
#Soustrayez même de cette liste pour faire une liste des seules cotes
neighbors = filter(lambda x: x % 2 != 0, myList)
#Faites une liste vide pour mettre le score de validation croisée
cv_scores = []
#Faites une validation croisée et ajoutez le score à la liste vide ci-dessus
for k in neighbors:
knn = KNeighborsClassifier(n_neighbors=k)
scores = cross_val_score(knn, X_train, y_train, cv=10, scoring='accuracy')
cv_scores.append(scores.mean())
Ceci est également un extrait du blog de kevinzakka
weights poids est un paramètre de pondération. Si «uniforme» est la valeur par défaut et que vous l'utilisez, toutes les valeurs sont considérées de la même manière. Lorsqu'il est défini sur «distance», les points proches sont considérés plus souvent (pondérés) que les points distants. Vous pouvez également créer et spécifier des fonctions vous-même.
algorithm Je suis désolé, je n'ai pas compris cela à cause du manque d'éducation mathématique en termes d'espace euclidien et de termes techniques. Cependant, pour ces personnes, vous pouvez spécifier «auto» et elles choisiront celle qui convient le mieux. Au fait, d'autres types semblent être 'ball_tree', 'kd_tree', 'brute', donc si vous êtes intéressé, veuillez le vérifier. De plus, si vous trouvez une explication facile à comprendre, veuillez nous en informer dans les commentaires.
Ce qui précède sont les principaux paramètres. Aussi, j'ajouterai dès que je comprendrai plus. Si vous comprenez, les demandes de modification sont également les bienvenues. J'ai hâte de travailler avec vous.
Plus les données sont volumineuses, plus il est probable qu'une classification plus précise sera possible. Un modèle simple et facile à comprendre.
--Mauvais point
J'ai mentionné deux points négatifs dans la méthode de voisinage Qu'est-ce que K, mais je vais le résumer à nouveau en une phrase. Si plusieurs classes sont mélangées de manière anormale ou si le ratio est anormalement biaisé, la classification peut ne pas fonctionner.
Ce qui précède est le contour du K-plus proche voisin pour autant que je puisse comprendre. Nous le mettrons à jour quotidiennement, donc si vous avez quelque chose à ajouter ou à corriger, nous vous serions reconnaissants de bien vouloir commenter.
Recommended Posts