¡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 ✓.