Algorithme k-NN (K-Nearest Neighbors, k plus proches voisins) - Amazon SageMaker

Algorithme k-NN (K-Nearest Neighbors, k plus proches voisins)

L'algorithme k-NN Amazon SageMaker est un algorithme basé sur un index. Il utilise une méthode non paramétrique pour la classification ou la régression. Pour les problèmes de classification, l'algorithme interroge les k points qui sont les plus proches de l'exemple de point et renvoie l'étiquette la plus fréquemment utilisée de leur classe comme étiquette prédite. Pour les problèmes de régression, l'algorithme interroge les k points les plus proches de l'exemple de point et renvoie la moyenne de leurs valeurs de caractéristique comme valeur prédite.

L'apprentissage avec l'algorithme k-NN possède trois étapes : l'échantillonnage, la réduction de dimension et la création d'index. L'échantillonnage réduit la taille du jeu de données initial afin qu'il puisse entrer en mémoire. Pour la réduction de dimension, l'algorithme diminue la dimension de caractéristique des données afin de réduire l'empreinte du modèle k-NN en mémoire et la latence de l'inférence. Nous fournissons deux méthodes de réduction des dimensions : méthode par projection aléatoire et méthode FJLT (Fast Johnson-Lindenstrauss Transform). En général, vous utilisez une réduction de dimension pour les jeux de données à dimension élevée (d > 1 000) afin d'éviter la « malédiction de dimension » qui perturbe l'analyse statistique des données, lesquelles deviennent de plus en plus clairsemées au fur et à mesure que les dimensions augmentent. L'objectif principal de l'apprentissage de l'algorithme k-NN est de construire l'index. L'index permet les recherches efficaces de distances entre les points dont les valeurs ou les étiquettes de classe n'ont pas encore été déterminées et les k points les plus proches à utiliser pour l'inférence.

Interface d'entrée/sortie pour l'algorithme k-NN

L'algorithme k-NN SageMaker prend en charge les canaux de données d'entraînement et test.

  • Utilisez un canal formation (train) pour les données que vous souhaitez échantillonner et construire dans l'index k-NN.

  • Utilisez un canal test pour émettre les scores dans les fichiers journaux. Les scores sont répertoriés sous la forme d'une ligne par mini-lot : précision pour classifier, erreur quadratique moyenne (mse, mean-squared error) pour regressor pour le score

Pour les entrées d'apprentissage, k-NN prend en charge les formats de données text/csv et application/x-recordio-protobuf. Pour le type d'entrée text/csv, les premières colonnes label_size sont interprétées comme vecteur d'étiquette de cette ligne. Vous pouvez utiliser le mode File (Fichier) ou le mode Pipe (Tube) pour entraîner les modèles sur les données obéissant au format recordIO-wrapped-protobuf ou au format CSV.

Pour les entrées d'inférence, k-NN prend en charge les formats de données application/json, application/x-recordio-protobuf et text/csv. Le format text/csv accepte un champ label_size et un paramètre d'encodage. Il suppose un champ label_size égal à 0 et un encodage UTF-8.

Pour les sorties d'inférence, k-NN prend en charge les formats de données application/json et application/x-recordio-protobuf. Ces deux formats de données prennent également en charge un mode de sortie détaillé. En mode de sortie détaillé, l'API fournit les résultats de recherche avec le vecteur des distances triées de la plus petite à la plus grande, et les éléments correspondants dans le vecteur des étiquettes.

Pour la transformation par lots, l'algorithme k-NN prend en charge le format de données application/jsonlines aussi bien pour l'entrée que pour la sortie. Voici un exemple d'entrée :

content-type: application/jsonlines {"features": [1.5, 16.0, 14.0, 23.0]} {"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}

Voici un exemple de sortie :

accept: application/jsonlines {"predicted_label": 0.0} {"predicted_label": 2.0}

Pour plus d'informations sur les formats de fichier en entrée et en sortie, consultez Formats de données pour les entrées de formation k-NN pour l'apprentissage, Formats de demande et de réponse k-NN pour l'inférence, ainsi que la rubrique Exemples de blocs-notes k-NN.

Exemples de blocs-notes k-NN

Pour obtenir un exemple de bloc-notes qui utilise l'algorithme k-NN SageMaker pour prédire les types de sol des espaces naturels à partir des données des services géologiques et forestiers, consultez la section consacrée au type de sols par classification k-NN.

Utilisez une instance de bloc-notes Jupyter pour exécuter l'exemple dans SageMaker. Pour savoir comment créer et ouvrir une instance de bloc-notes Jupyter dans SageMaker, consultez Utilisation des instances de bloc-notes Amazon SageMaker. Une fois que vous avez créé une instance de bloc-notes et qu'elle est ouverte, sélectionnez l'onglet Exemples SageMaker pour afficher la liste de tous les exemples de blocs-notes SageMaker. Recherchez les blocs-notes K-Nearest Neighbor dans la section Introduction aux algorithmes Amazon. Pour ouvrir un bloc-notes, cliquez sur son onglet Use (Utiliser) et sélectionnez Create copy (Créer une copie).

Recommandation d'instance EC2 pour l'algorithme k-NN

Recommandation d'instance pour formation avec l'algorithme K-NN

Pour démarrer, essayez d'exécuter l'apprentissage sur un processeur, en utilisant, par exemple, une instance ml.m5.2xlarge, ou sur un processeur graphique, en utilisant, par exemple, une instance ml.p2.xlarge.

Recommandation d'instance pour l'inférence avec l'algorithme k-NN

Les demandes d'inférence des processeurs (CPU) ont généralement une latence moyenne inférieure aux demandes des processeurs graphiques (GPU), car la communication CPU-GPU est soumise à une taxe lorsque vous utilisez un matériel à processeur graphique. Cependant, les processeurs graphiques (GPU) ont généralement un débit plus élevé pour les plus grands lots.