Maison >développement back-end >Tutoriel Python >Introduction détaillée à l'algorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

Introduction détaillée à l'algorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

不言
不言avant
2019-01-14 11:24:173536parcourir

Cet article vous apporte une introduction détaillée à l'algorithme KNN (algorithme du k-plus proche voisin) en Python (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. . a aidé.

L'algorithme KNN est un algorithme de classification des données. La catégorie des k données du voisin le plus proche de l'échantillon représente la catégorie de l'échantillon, c'est pourquoi on l'appelle également l'algorithme du k-voisin le plus proche. L'algorithme KNN est l'une des méthodes les plus simples d'exploration de données et peut être grossièrement divisé en les étapes suivantes :

  • Données d'entraînement : données de toutes les catégories de données dans l'ensemble de données d'origine.

  • Données de test : l'échantillon de données que nous utiliserons pour les tests.

  • Traitement des données

Les données de test que nous obtenons sont généralement de dimensions différentes de celles des données de formation. À ce stade, nous devons mettre à niveau les données. données de test La dimension est la même que celle des données d'entraînement. Le numpy de Python est livré avec une fonction Tile() qui peut nous aider à augmenter la dimension des données de test.

  • Vectoriser les données

Une fois la dimensionnalité des données de test augmentée, afin de calculer la distance du point d'échantillonnage, nous avons besoin pour vectoriser les données à ce moment-là, ce qu'on appelle la vectorisation est très simple, c'est-à-dire soustraire deux données de même dimension.

  • Calculer la distance euclidienne

La distance euclidienne, c'est-à-dire la distance euclidienne, peut être calculée à l'aide du théorème de Pythagore. chaque vecteur du groupe de vecteurs obtenu en soustrayant les données de test et les données d'apprentissage peut être utilisé pour obtenir un groupe de vecteurs composé de distances.

  • Classer en fonction de la distance

Sélectionnez k données avec la plus petite distance du point d'échantillonnage et comptez quelles catégories de données parmi ces k données Avec la fréquence d'occurrence la plus élevée, la catégorie de données du point d'échantillonnage peut être déterminée.

Implémentation de l'algorithme :

1. Nous devons d'abord introduire numpy et l'opérateur, saisir from numpy import * et import operator.

2. Ensuite, nous devons définir une fonction knn. Dans la fonction knn, nous devons introduire quatre paramètres, à savoir k, les données d'entraînement, les données de test et la catégorie de données.

3. Ensuite, nous devons d'abord effectuer une opération d'amélioration de la dimensionnalité sur les données. Nous devons utiliser la fonction Tile(a,(b,c)) sous numpy, a étant les données à effectuer sur la dimensionnalité. opération d'amélioration, c'est-à-dire les données de test, b sont les données de ligne à mettre à niveau vers les données de test et c sont les données de colonne à mettre à niveau vers les données de test.

Introduction détaillée à lalgorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

4. Dans l'opération précédente, nous avons généralement besoin d'obtenir le nombre de lignes et de colonnes des données d'entraînement. Dans ce cas, nous avons besoin. pour utiliser la fonction shape(), la fonction shape() renvoie un tuple composé de lignes et de colonnes des données d'entraînement. Si nous voulons connaître le nombre de lignes ou de colonnes des données d'entraînement, il nous suffit de nous y référer via le. indice d'élément de tableau.

Introduction détaillée à lalgorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

5. Une fois que les dimensions des données sont les mêmes, nous devons soustraire les deux données pour obtenir un vecteur, puis calculer la somme. des carrés de chaque valeur de ce vecteur La racine carrée de est la distance entre les données de test et les données d'entraînement, puis appelle la fonction argsort() pour trier les distances par ordre croissant, mais cette fonction renvoie l'indice du tableau élément.

Introduction détaillée à lalgorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

6. Ensuite, afin de voir intuitivement le nombre d'occurrences de différentes catégories de données, nous devons configurer un dictionnaire vide pour stocker les data.Après avoir obtenu Après le dictionnaire, nous devons trier le dictionnaire par ordre décroissant en fonction du nombre d'occurrences des différentes catégories de données, puis renvoyer la première valeur du dictionnaire pour obtenir la catégorie de données des données de test.

7. Le code de l'algorithme est le suivant :

from numpy import *
import operator
def knn(k, test_data, train_data, labels):
    train_size = train_data.shape[0]    #获取训练数据的行数
    test_size = tile(test_data, (train_size, 1))    #将测试数据的行升维
    minus = test_size-train_data    #得到向量
    sq_minus = minus**2
    sum_sq_minus = sq_minus.sum(axis=1)        #得到平方后的每个数组内元素的和
    distc = sum_sq_minus**0.5
    sort_distc = distc.argsort()    #将距离按升序排列
    static = {}
    for i in range(0, k):
        vote = labels[sort_distc[i]]    #获取数据类型
        static[vote] = static.get(vote, 0)+1    #统计每个数据类型的出现次数
    sort_static = sorted(static.items(), key=operator.itemgetter(1), reverse=True)    #将字典中的元素按出现次数降序排列
    return sort_static[0][0]    #返回出现次数最多的数据类型

8. Le dictionnaire doit être trié dans l'algorithme, donc la fonction sorted() doit être utilisée. ) a trois paramètres, respectivement. Pour items(), Operator.itemgetter(), reverse, le tri par défaut est ascendant. Si nous voulons trier par ordre décroissant, nous devons définir le troisième paramètre sur True. trier selon les valeurs du dictionnaire, il faut donc saisir sorted(static.items(), key=operator.itemgetter(1), reverse=True), lorsque la valeur dans la fonction Operator.itemgetter() est 1, elle est triée selon les valeurs du dictionnaire, et lorsque la valeur est 0, elle est triée selon les clés du dictionnaire.

Introduction détaillée à lalgorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

9. La manière d'accéder aux éléments après le tri est la même que la manière d'accéder aux éléments d'un tableau bidimensionnel

Introduction détaillée à lalgorithme KNN (algorithme k-nearest voisin) en Python (avec exemples)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer