We classificeren een vector $$\mathbf{x}$$ in ofwel klasse 0 ofwel klasse 1. Hiertoe beschikken we over een verzameling van $$N$$ voorbeelden, waarvan we de klasse kennen. Om nu een nieuwe vector $$\mathbf{x}$$ toe te wijzen aan klasse 0 of 1, gaan we op zoek naar de $$K$$ ($$K$$ positief en oneven) dichtste buren van $$\mathbf{x}$$ uit de voorbeelden, en kiezen de klasse die het meest voorkomt in die $$K$$ dichtste buren. Hierbij wordt "dichtste" gedefinieerd op basis van Euclidische afstand. De afstand tussen de vectoren $$\mathbf{x}$$ en $$\mathbf{y}$$ wordt dus gegeven door:
$$ d(\mathbf{x},\mathbf{y}) = \sqrt{\sum_{i=0}^{M-1} (x_i - y_i)^2} $$

Schrijf de functie dichtste_buren() met als argumenten:

Het resultaat van de functie is een 2D NumPy tabel met $$P$$ rijen en $$M+1$$ kolommen. Rij $$i$$ van deze tabel bevat rij $$i$$ uit het 2de argument van de functie, aangevuld met de klasse (0.0 of 1.0), bepaald volgens de aanpak die hierboven geschetst werd. $$ $$

Voorbeeld

Merk op dat het Dodonascript je resultaat omzet naar een lijst-van-lijsten. Het resultaat van je functie moet wel degelijk een 2D NumPy-tabel zijn. De numerieke waarden worden ook afgekapt op 4 decimalen.

dichtste_buren(np.array([[8.7, 4.3, 8.7, 1.0], [-8.1, 6.5, 4.4, 0.0], [-6.1, -8.1, 4.3, 1.0], [-8.7, -3.3, -7.4, 0.0], [0.8, 3.8, 8.5, 1.0], [0.3, 0.3, -1.9, 0.0], [9.9, -4.6, 2.5, 1.0]]), np.array([[4.9, 4.6, 7.8], [5.8, 8.6, 5.7], [5.4, -1.1, -9.4], [7.4, 0.9, -9.1], [-3.7, 6.0, 5.9]]), 1)
#[[4.9, 4.6, 7.8, 1.0], [5.8, 8.6, 5.7, 1.0], [5.4, -1.1, -9.4, 0.0], [7.4, 0.9, -9.1, 0.0], [-3.7, 6.0, 5.9, 0.0]]

dichtste_buren(np.array([[-3.1, 7.4, -8.0, 0.0], [5.1, -9.6, -5.7, 1.0], [0.6, 7.7, 1.5, 0.0], [-9.6, -2.1, -8.6, 0.0], [5.4, -9.3, 9.3, 1.0], [-7.9, -9.7, 5.3, 1.0], [8.4, 1.9, -9.7, 0.0], [8.0, 8.1, -0.8, 0.0], [-7.8, -9.5, -0.1, 1.0], [-5.4, 2.1, 3.7, 0.0]]), np.array([[-9.8, 1.0, 5.0], [8.0, 8.8, -5.4], [-3.4, 1.4, 2.3]]), 7)
#[[-9.8, 1.0, 5.0, 0.0], [8.0, 8.8, -5.4, 0.0], [-3.4, 1.4, 2.3, 0.0]]