fastKnn

fastknn

Description

L'action `fastknn` exécute une recherche des k plus proches voisins (k-nearest neighbors). Elle est utilisée pour identifier les k observations les plus proches d'une requête donnée à l'intérieur d'un ensemble de données de référence. Cette action est fondamentale pour les tâches de classification, de régression et de recommandation basées sur la similarité. Elle prend en charge plusieurs métriques de distance (Euclidienne L2, Cosinus, Produit Scalaire) et offre deux méthodes de recherche : EXACT (calcul précis mais plus coûteux) et APPROXIMATE (plus rapide pour les grands volumes de données). Elle permet également l'imputation de valeurs manquantes basée sur les voisins trouvés.

Paramètres
ParamètreDescription
tableSpécifie la table de données d'entrée contenant les données de référence (les voisins potentiels).
querySpécifie la table de données d'entrée contenant les observations de la requête pour lesquelles on cherche les voisins.
kSpécifie le nombre de voisins les plus proches à trouver pour chaque observation de la requête. La valeur par défaut est 2.
methodSpécifie la méthode de recherche : 'EXACT' (par défaut) calcule toutes les distances, 'APPROXIMATE' utilise un algorithme optimisé pour la vitesse.
distanceMetricDéfinit la métrique de distance : 'L2' (Euclidienne, défaut), 'COSINE' ou 'IP' (Produit Scalaire).
inputsSpécifie la liste des variables d'entrée à utiliser pour le calcul de distance.
outputSpécifie la table de sortie contenant les identifiants des k plus proches voisins trouvés.
outDistSpécifie la table de sortie contenant les distances calculées entre la requête et ses voisins.
idSpécifie une ou plusieurs variables à utiliser comme identifiant de ligne.
imputeSi mis à TRUE, les valeurs manquantes dans la table de requête sont imputées en utilisant les valeurs des voisins.
Préparation des Données Voir la fiche de ce code dataprep
Création de données pour la recherche de voisins

Création d'une table de référence (train) et d'une table de requête (query) avec des coordonnées numériques.

Copié !
1 
2DATA casuser.train_data;
3DO i=1 to 100;
4id=i;
5x1=rand('uniform');
6x2=rand('normal');
7OUTPUT;
8END;
9 
10RUN;
11 
12DATA casuser.query_data;
13DO i=1 to 5;
14id=i;
15x1=rand('uniform');
16x2=rand('normal');
17OUTPUT;
18END;
19 
20RUN;
21 

Exemples

Recherche des 3 plus proches voisins pour chaque observation de la table 'query_data' dans la table 'train_data' en utilisant la méthode exacte par défaut.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3fastKnn.fastknn / TABLE={name="train_data"} query={name="query_data"} k=3 OUTPUT={casOut={name="knn_results", replace=true}};
4 
5RUN;
6 
Résultat :
Une table 'knn_results' contenant les identifiants des 3 voisins les plus proches pour chaque ligne de la requête.

Recherche des 5 voisins les plus proches en utilisant la méthode approximative (plus rapide) et la distance Cosinus. Les distances sont sauvegardées dans une table séparée.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3fastKnn.fastknn / TABLE={name="train_data"} query={name="query_data"} k=5 method="APPROXIMATE" distanceMetric="COSINE" inputs={"x1", "x2"} id={"id"} OUTPUT={casOut={name="knn_neighbors", replace=true}} outDist={name="knn_distances", replace=true};
4 
5RUN;
6 
Résultat :
Deux tables : 'knn_neighbors' avec les IDs des voisins et 'knn_distances' avec les valeurs de distance Cosinus correspondantes.

FAQ

Quelle est la fonction principale de l'action fastknn ?
Quels sont les paramètres obligatoires pour exécuter cette action ?
Comment spécifier la métrique de distance à utiliser ?
Est-il possible d'imputer les valeurs manquantes dans les données de requête ?
Comment définir le nombre de voisins à renvoyer ?
Quelles sont les méthodes de recherche disponibles ?
À quoi sert le paramètre efConstruction ?
Comment sauvegarder les distances calculées dans une table ?
Comment ne sortir que les k distances les plus proches dans la table outDist ?
Quel paramètre contrôle le nombre maximum de connexions par nœud ?