No estoy realmente familiarizado con KNN, pero la primera idea para la visualización que tendría es darle un marcador diferente al predicho erróneamente. Vea la captura de pantalla a continuación. Son los datos en forma de U, KNN con K = 4 dio el mejor resultado.
- fórmula de predicción guardada
- hizo una nueva fórmula para comparar la clase verdadera y la clase predicha
- usa esa fórmula para la forma del marcador
También hay una función eficiente para encontrar próximos vecinos, podríamos usarla, para encontrar, por ejemplo, el rango de los puntos incorrectos y darle un aspecto diferente. Quizás esto ayude.

He jugado un poco
- tomó los datos de Big Class (peso y altura como xey, sexo como clase),
- hizo análisis KNN, fórmula guardada
- generó una cuadrícula en una tabla separada y copió la fórmula en esa cuadrícula para mostrar "áreas de decisión"
ver captura de pantalla. Podría ser más bonito (se debe a la distribución de datos, etc.), pero muestra lo que se quiere decir.
También puede hacer esto de forma interactiva, si no desea codificar. Se adjunta el código de este ejemplo. Quizás esto pueda ayudar.

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>