Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

980
Vistas
Clasificación binaria de Keras: función de activación sigmoidea

Implementé un MLP básico en Keras con tensorflow y estoy tratando de resolver un problema de clasificación binaria. Para la clasificación binaria, parece que sigmoid es la función de activación recomendada y no entiendo muy bien por qué y cómo trata Keras con esto.

Entiendo que la función sigmoide producirá valores en un rango entre 0 y 1. Según tengo entendido, para los problemas de clasificación que usan sigmoide, se usará un cierto umbral para determinar la clase de una entrada (típicamente 0.5). En Keras, no veo ninguna forma de especificar este umbral, así que supongo que se hace implícitamente en el back-end. Si este es el caso, ¿cómo distingue Keras entre el uso de sigmoide en un problema de clasificación binaria o un problema de regresión? Con la clasificación binaria, queremos un valor binario, pero con la regresión se necesita un valor nominal. Todo lo que puedo ver que podría indicar esto es la función de pérdida. ¿Es eso informar a Keras sobre cómo manejar los datos?

Además, suponiendo que Keras está aplicando implícitamente un umbral, ¿por qué genera valores nominales cuando uso mi modelo para predecir nuevos datos?

Por ejemplo:

 y_pred = model.predict(x_test) print(y_pred)

da:

[7.4706882e-02] [8.3481872e-01] [2.9314638e-04] [5.2297767e-03] [2.1608515e-01] ... [4.4894204e-03] [5.1120580e-05] [7.0263929e-04 ]

Yo mismo puedo aplicar un umbral al predecir para obtener una salida binaria, sin embargo, seguramente Keras debe estar haciendo eso de todos modos para clasificar correctamente. ¿Quizás Keras está aplicando un umbral cuando entrena el modelo, pero cuando lo uso para predecir nuevos valores, el umbral no se usa ya que la función de pérdida no se usa para predecir? ¿O no está aplicando un umbral en absoluto, y los valores nominales generados funcionan bien con mi modelo? Verifiqué que esto está sucediendo en el ejemplo de Keras para la clasificación binaria, por lo que no creo que haya cometido ningún error con mi código, especialmente porque está prediciendo con precisión.

Si alguien pudiera explicarme cómo funciona esto, se lo agradecería mucho.

Aquí está mi modelo como punto de referencia:

 model = Sequential() model.add(Dense(124, activation='relu', input_shape = (2,))) model.add(Dropout(0.5)) model.add(Dense(124, activation='relu')) model.add(Dropout(0.1)) model.add(Dense(1, activation='sigmoid')) model.summary() model.compile(loss='binary_crossentropy', optimizer=SGD(lr = 0.1, momentum = 0.003), metrics=['acc']) history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test)) score = model.evaluate(x_test, y_test, verbose=0)
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El resultado de una clasificación binaria es la probabilidad de que una muestra pertenezca a una clase.

¿Cómo distingue Keras entre el uso de sigmoides en un problema de clasificación binaria o un problema de regresión?

No es necesario. Utiliza la función de pérdida para calcular la pérdida, luego los derivados y actualizar los pesos.

En otras palabras:

  • Durante el entrenamiento, el marco minimiza la pérdida. El usuario debe especificar la función de pérdida (proporcionada por el marco) o proporcionar la suya propia. A la red solo le importa el valor escalar que genera esta función y sus 2 argumentos son y^ y real.
  • Cada función de activación implementa las funciones de propagación hacia adelante y hacia atrás. El marco solo está interesado en estas 2 funciones. No le importa lo que la función hace exactamente. El único requisito es que la función de activación no sea lineal.
over 4 years ago · Santiago Trujillo Denunciar

0

Puede asignar el umbral explícitamente en compile() usando

 tf.keras.metrics.BinaryAccuracy( name="binary_accuracy", dtype=None, threshold=0.5 )

como lo siguiente:

 model.compile(optimizer='sgd', loss='mse', metrics=[tf.keras.metrics.BinaryAccuracy()])
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda