fastKnn

fastknn

##set_fastknn

Description

L'action fastknn effectue une recherche des k-plus proches voisins (k-nearest neighborAlgorithme de classification ou régression qui prédit la valeur d'une observation en identifiant les $k$ points les plus proches dans l'espace des données, basé sur une mesure de dista) dans SAS Viya. Elle permet de trouver rapidement quels points d'un ensemble de données de référence sont les plus similaires à des points d'un ensemble de requête. Cette action est particulièrement efficace pour les grands jeux de données grâce à son mode approximatif basé sur des graphes (HNSWAlgorithme de recherche de plus proches voisins (ANN) utilisant des graphes hiérarchiques. Il permet une indexation ultra-rapide et une recherche vectorielle efficace sur des données massives.), mais elle propose aussi une recherche exacte. C'est l'outil idéal pour la recommandation, la détection d'anomalies ou simplement pour savoir qui ressemble à qui dans votre voisinage de données !

Syntaxe Officielle
fastKnn.fastknn /
attributes={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...},
display={caseSensitive=true|false, exclude=true|false, excludeAll=true|false, keyIsPath=true|false, names={"string-1", ...}, pathType="LABEL"|"NAME", traceNames=true|false},
distanceMetric="COSINE"|"IP"|"L2",
efConstruction=integer,
efSearch=integer,
id={"variable-name-1", ...},
impute=true|false,
inputs={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...},
k=integer,
maxNeighbors=integer,
method="APPROXIMATE"|"EXACT",
outDist={caslib="string", compress=true|false, indexVars={"variable-name-1", ...}, label="string", name="table-name", replace=true|false, ...},
outImpute={caslib="string", compress=true|false, name="table-name", replace=true|false, ...},
output={casOut={name="table-name", replace=true|false}, copyVars="ALL"|{"var1", ...}},
query={caslib="string", name="table-name", where="where-expression"},
seed=double,
table={caslib="string", name="table-name", where="where-expression"},
threshDist=double,
useTopKOutDist=true|false

Paramètres Clés

Nom du paramètre Description
query Spécifie la table d'entrée contenant les observations pour lesquelles vous souhaitez trouver des voisins.
table Spécifie la table de référence (ou d'entraînement) dans laquelle les voisins seront recherchés.
k Le nombre de voisins les plus proches à identifier pour chaque point de requête (par défaut 2).
method Définit si l'on veut une recherche 'EXACT' (parcourir tout) ou 'APPROXIMATE' (plus rapide sur de gros volumes).
distanceMetric La mesure de distance : L2 (Euclidienne), COSINE (Cosinus) ou IP (Produit intérieur).
outDist Table de sortie optionnelle pour stocker les distances calculées entre les points.
output Définit la table de sortie principale contenant les identifiants des voisins trouvés.
id Variables servant d'identifiants uniques pour les lignes dans les tables d'entrée.
inputs Variables numériques à utiliser pour calculer les distances.
efConstruction Pour la méthode APPROXIMATE, contrôle la précision de la construction de l'index (plus élevé = plus précis mais plus lent).
efSearch Pour la méthode APPROXIMATE, contrôle la profondeur de recherche dans l'index (plus élevé = plus précis).
impute Si true, remplace les valeurs manquantes dans la table de requête en utilisant la moyenne/mode des k voisins.

Préparation des données

Création de données pour k-NN

Génération d'une table de référence (référence) et d'une table de test (requête) avec des coordonnées X et Y.

1DATA casuser.reference;
2 DO id = 1 to 1000;
3 x = rannor(1);
4 y = rannor(1);
5 OUTPUT;
6 END;
7RUN;
8DATA casuser.requete;
9 DO id = 1 to 5;
10 x = rannor(2);
11 y = rannor(2);
12 OUTPUT;
13 END;
14RUN;

Exemples d'utilisation

Recherche exacte de base

Trouver les 3 voisins les plus proches de manière exacte pour chaque point de la table 'requete' en utilisant les points de 'reference'.

1PROC CAS;
2 fastKnn.fastknn /
3 TABLE={name="reference"},
4 query={name="requete"},
5 k=3,
6 id="id",
7 inputs={"x", "y"},
8 OUTPUT={casOut={name="knn_out", replace=true}};
9RUN;
Résultat Attendu :
Une table 'knn_out' est créée contenant pour chaque ID de requête les IDs de ses 3 plus proches voisins.
Recherche approximative haute performance avec distances

Utilise la méthode approximative (HNSW) pour aller plus vite que la lumière, calcule les distances cosinus, et sauvegarde les distances dans une table séparée.

1PROC CAS;
2 fastKnn.fastknn /
3 TABLE={name="reference"},
4 query={name="requete"},
5 method="APPROXIMATE",
6 k=5,
7 distanceMetric="COSINE",
8 efConstruction=100,
9 efSearch=50,
10 id="id",
11 inputs={"x", "y"},
12 OUTPUT={casOut={name="knn_approx_out", replace=true}},
13 outDist={name="knn_distances", replace=true};
14RUN;
Résultat Attendu :
Recherche ultra-rapide optimisée pour les gros volumes. Sortie des IDs dans 'knn_approx_out' et des valeurs de distances réelles dans 'knn_distances'.
Imputation de valeurs manquantes par k-NN

Cette option permet de nettoyer vos données en remplaçant les trous par la 'sagesse du voisinage'.

1PROC CAS;
2 fastKnn.fastknn /
3 TABLE={name="reference"},
4 query={name="requete"},
5 impute=true,
6 k=10,
7 id="id",
8 inputs={"x", "y"},
9 outImpute={name="query_imputed", replace=true},
10 OUTPUT={casOut={name="knn_impute_log", replace=true}};
11RUN;
Résultat Attendu :
La table 'query_imputed' contiendra les données de la requête où les valeurs manquantes ont été statistiquement comblées grâce aux 10 voisins les plus proches.