Je ne suis pas vraiment familier avec KNN, mais la première idée de visualisation que j'aurais, c'est de donner un marqueur différent au mal prédit. Voir la capture d'écran ci-dessous. Ce sont les données en forme de U, KNN avec K = 4 a donné le meilleur résultat.
- formule de prédiction enregistrée
- fait une nouvelle formule pour comparer la vraie classe et la classe prédite
- utiliser cette formule pour la forme du marqueur
Il y a aussi une fonction efficace pour trouver les prochains voisins, nous pourrions l'utiliser, pour trouver par exemple la plage des mauvais points et lui donner un aspect différent. Peut-être que cela aide.

J'ai joué un peu,
- a pris les données de Big Class (poids et taille en x et y, sexe en tant que classe),
- analyse KNN effectuée, formule enregistrée
- a généré une grille dans une table séparée et copié la formule dans cette grille pour afficher les «zones de décision»
voir capture d'écran. Cela pourrait être plus joli (cela est dû à la distribution des données, etc.), mais montre ce que cela signifie.
Vous pouvez également le faire de manière interactive, si vous ne souhaitez pas coder. Vous trouverez ci-joint le code de cet exemple. Cela peut peut-être aider.

Names Default To Here( 1 );
// Create a data table (x and y are height and weight from Big Class, class is sex)
dt_data= New Table( "dt_data",
Add Rows( 40 ),
New Column( "x", Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[59, 61, 55, 66, 52, 60, 61, 51, 60, 61, 56, 65, 63, 58, 59, 61, 62, 65, 63, 62,
63, 64, 65, 64, 68, 64, 69, 62, 64, 67, 65, 66, 62, 66, 65, 60, 68, 62, 68, 70]
),
Set Display Width( 48 )
),
New Column("y", Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[95, 123, 74, 145, 64, 84, 128, 79, 112, 107, 67, 98, 105, 95, 79, 81, 91, 142,
84, 85, 93, 99, 119, 92, 112, 99, 113, 92, 112, 128, 111, 105, 104, 106, 112,
115, 128, 116, 134, 172]
),
Set Display Width( 48 )
),
New Column( "class", Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values(
[1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 2]
)
),
);
// Model class by x and y and save formula
knn_rep = dt_data << K Nearest Neighbors(
Y( :class ),
X( :x, :y ),
K( 10 ),
Set Random Seed( 42 )
);
knn_rep << xpath( "class" ) << Save Prediction Formula( 8 );
knn_rep << Close Window();
// Generate a grid data table to show the whole field
Summarize(
dt_data,
max_x = Max( :x ),
min_x = Min( :x ),
max_y = Max( :y ),
min_y = Min( :y )
);
dx = 1;
get_limit = Function( {value},
Round( value / dx ) * dx + If( value >= 0, 1, -1 ) * dx
);
dtx = As Table(
(get_limit( min_x ) / dx :: get_limit( max_x ) / dx)` * dx,
<<COLUMN names=""></COLUMN>