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ètre | Description |
|---|---|
| table | Spécifie la table de données d'entrée contenant les données de référence (les voisins potentiels). |
| query | Spécifie la table de données d'entrée contenant les observations de la requête pour lesquelles on cherche les voisins. |
| k | Spécifie le nombre de voisins les plus proches à trouver pour chaque observation de la requête. La valeur par défaut est 2. |
| method | Spécifie la méthode de recherche : 'EXACT' (par défaut) calcule toutes les distances, 'APPROXIMATE' utilise un algorithme optimisé pour la vitesse. |
| distanceMetric | Définit la métrique de distance : 'L2' (Euclidienne, défaut), 'COSINE' ou 'IP' (Produit Scalaire). |
| inputs | Spécifie la liste des variables d'entrée à utiliser pour le calcul de distance. |
| output | Spécifie la table de sortie contenant les identifiants des k plus proches voisins trouvés. |
| outDist | Spécifie la table de sortie contenant les distances calculées entre la requête et ses voisins. |
| id | Spécifie une ou plusieurs variables à utiliser comme identifiant de ligne. |
| impute | Si mis à TRUE, les valeurs manquantes dans la table de requête sont imputées en utilisant les valeurs des 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.
| 1 | |
| 2 | DATA casuser.train_data; |
| 3 | DO i=1 to 100; |
| 4 | id=i; |
| 5 | x1=rand('uniform'); |
| 6 | x2=rand('normal'); |
| 7 | OUTPUT; |
| 8 | END; |
| 9 | |
| 10 | RUN; |
| 11 | |
| 12 | DATA casuser.query_data; |
| 13 | DO i=1 to 5; |
| 14 | id=i; |
| 15 | x1=rand('uniform'); |
| 16 | x2=rand('normal'); |
| 17 | OUTPUT; |
| 18 | END; |
| 19 | |
| 20 | RUN; |
| 21 |
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.
| 1 | |
| 2 | PROC CAS; |
| 3 | fastKnn.fastknn / TABLE={name="train_data"} query={name="query_data"} k=3 OUTPUT={casOut={name="knn_results", replace=true}}; |
| 4 | |
| 5 | RUN; |
| 6 |
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.
| 1 | |
| 2 | PROC CAS; |
| 3 | fastKnn.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 | |
| 5 | RUN; |
| 6 |