Menu
CoddyTech

Cómo decide k-NN

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 6 de 58.

Este capítulo profundiza en k-NN. Al terminarlo, podrás trazar su mapa para cualquier conjunto de datos, como este de chiles suaves y picantes:

80 chiles representados según su longitud y el grosor de su pared en un mapa sombreado: una región naranja a la izquierda donde el modelo indica que son picantes y una región azul a la derecha donde indica que son suaves

Para etiquetar un chile nuevo, k vecinos más cercanos encuentra los k chiles de entrenamiento más cercanos y votan:

Un primer plano de los chiles con una estrella negra que representa uno nuevo. Líneas grises lo conectan con sus 5 chiles más cercanos: 3 picantes y 2 suaves, así que ganan los picantes

Más cercano significa la distancia más pequeña, la que encontraste en la sección 2. Tú eliges k:

model = KNeighborsClassifier(n_neighbors=5)

n_neighbors es k, 5 salvo que indiques lo contrario. Con dos clases, un valor impar de k nunca puede quedar en empate.

challenge icon

Desafío

Fácil

Un club de astronomía clasifica las estrellas de stars.csv en enanas y gigantes según su temperatura y magnitud. El código inicial lee una estrella nueva y k.

  1. Encuentra a mano las k estrellas más cercanas: añade una columna distance y luego ordénalas.
  2. Imprime cuántas de ellas son gigantes y, después, cuál es la ganadora de la votación.
  3. Compruébalo con un modelo k-NN de ese k, entrenado con todas las estrellas.

Para la estrella de otro club y k = 5:

Giants among the nearest 5: 4
By hand: giant
Model: giant

Pruébalo tú mismo

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Una fila por estrella: temperatura en miles de kelvin, magnitud (cuanto menor, más brillante), enana o gigante
stars = pd.read_csv("stars.csv")
X = stars[["temp_kK", "magnitude"]]
y = stars["type"]

# La nueva estrella y k
temp = float(input())
mag = float(input())
k = int(input())
new_star = pd.DataFrame({"temp_kK": [temp], "magnitude": [mag]})

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online