Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] error al mostrar len(x_train)

Observación: Para poder ejecutar el código, hay que importar las bibliotecas, tal como aprendimos del aula anterior.

Luego, al ejecutar la instrucción: print(f"Entrenaremos con {len(x_train)} elementos y probaremos con {len(x_test)} elementos.")

da el error: NameError: name 'x_train' is not defined

Lo cual se soluciona moviendo dicha línea a una posición posterior al bloque donde se calcula x_train y x_test

Entiendo que al instructor no le da ese error porque se ejecuta en la misma sesión el código del aula anterior, por lo cual ya viene calculado x_train y x_test

O sería ; print(f"Entrenaremos con {len(raw_x_train)} elementos y probaremos con {len(raw_x_test)} elementos.") ?

Por favor, confirmar si es correcto el razonamiento.

Gracias.

1 respuesta
solución!

¡Hola Ernesto! Cómo va?

El error que estás obteniendo, NameError: name 'x_train' is not defined, se produce porque estás intentando imprimir la longitud de x_train antes de que se haya definido. Esto se debe a que estás intentando imprimir la longitud de x_train antes de que se calcule en el bloque de código anterior.

La solución correcta sería mover la línea de código print(f"Entrenaremos con {len(x_train)} elementos y probaremos con {len(x_test)} elementos.") después de que se haya calculado x_train y x_test. De esta manera, cuando intentes imprimir la longitud de x_train, ya estará definida y no obtendrás el error.

Por lo tanto, el código corregido sería:

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler

x= datos[['horas_esperadas','precio']]
y= datos.finalizado

SEED = 42
np.random.seed(SEED)

raw_x_train, raw_x_test, y_train, y_test = train_test_split(x,y,test_size=0.25,stratify=y)

scaler = StandardScaler()
scaler.fit(raw_x_train)
x_train = scaler.transform(raw_x_train)
x_test = scaler.transform(raw_x_test)

print(f"Entrenaremos con {len(raw_x_train)} elementos y probaremos con {len(raw_x_test)} elementos.") # Cambié x_train por raw_x_train y x_test por raw_x_test

model = SVC()
model.fit(x_train,y_train)
previsiones= model.predict(x_test)

data_x = x_test[:,0]
data_y = x_test[:,1]

x_min = data_x.min()
x_max = data_x.max()
y_min = data_y.min()
y_max = data_y.max()

pixels = 100
eje_x = np.arange(x_min, x_max, (x_max-x_min)/pixels)
eje_y = np.arange(y_min, y_max, (y_max-y_min)/pixels)

xx, yy = np.meshgrid(eje_x, eje_y)
puntos = np.c_[xx.ravel(), yy.ravel()]
Z = model.predict(puntos)
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3)
plt.scatter(data_x, data_y, c=y_test, s=1)

tasa_de_acierto = accuracy_score(y_test, previsiones)
print(f'La tasa de acierto fue de: {round(tasa_de_acierto*100,2)}%')

De esta manera, deberías poder imprimir la longitud de raw_x_train y raw_x_test sin obtener ningún error.

Espero que esta solución te sea útil. Si tienes alguna otra pregunta, no dudes en preguntar. ;)

Si este post te ayudó, por favor, marca como solucionado ✓.