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

202
Vistas
¿Por qué no puedo obtener el resultado que obtuve con sklearn LogisticRegression con el método coeficientes_sgd?
from math import exp import numpy as np from sklearn.linear_model import LogisticRegression

Usé el siguiente código de Cómo implementar la regresión logística desde cero en Python

 def predict(row, coefficients): yhat = coefficients[0] for i in range(len(row)-1): yhat += coefficients[i + 1] * row[i] return 1.0 / (1.0 + exp(-yhat)) def coefficients_sgd(train, l_rate, n_epoch): coef = [0.0 for i in range(len(train[0]))] for epoch in range(n_epoch): sum_error = 0 for row in train: yhat = predict(row, coef) error = row[-1] - yhat sum_error += error**2 coef[0] = coef[0] + l_rate * error * yhat * (1.0 - yhat) for i in range(len(row)-1): coef[i + 1] = coef[i + 1] + l_rate * error * yhat * (1.0 - yhat) * row[i] return coef dataset = [[2.7810836,2.550537003,0], [1.465489372,2.362125076,0], [3.396561688,4.400293529,0], [1.38807019,1.850220317,0], [3.06407232,3.005305973,0], [7.627531214,2.759262235,1], [5.332441248,2.088626775,1], [6.922596716,1.77106367,1], [8.675418651,-0.242068655,1], [7.673756466,3.508563011,1]] l_rate = 0.3 n_epoch = 100 coef = coefficients_sgd(dataset, l_rate, n_epoch) print(coef)

[-0.39233141593823756, 1.4791536027917747, -2.316697087065274]

 x = np.array(dataset)[:,:2] y = np.array(dataset)[:,2] model = LogisticRegression(penalty="none") model.fit(x,y) print(model.intercept_.tolist() + model.coef_.ravel().tolist())

[-3.233238244349982, 6.374828107647225, -9.631487530388092]

¿Qué debo cambiar para obtener los mismos coeficientes o más cercanos? ¿Cómo puedo establecer coeficientes iniciales, tasa de aprendizaje, n_epoch?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Bueno, aquí hay muchos matices 🙂

En primer lugar, recuerde que es posible estimar coeficientes de regresión logística con probabilidad logarítmica (negativa) utilizando varios métodos de optimización, incluido el SGD que implementó, pero no existe una solución exacta de forma cerrada. Entonces, incluso si implementa una copia exacta de LogisticRegression de scikit-learn, deberá establecer los mismos hiperparámetros (número de épocas, tasa de aprendizaje, etc.) y el estado aleatorio para obtener los mismos coeficientes.

En segundo lugar, LogisticRegression ofrece cinco métodos de optimización diferentes (parámetro solver ). Ejecuta LogisticRegression(penalty="none") con sus parámetros predeterminados y el valor predeterminado para el solver es 'lbfgs' , no SGD; por lo tanto, dependiendo de sus datos e hiperparámetros, puede obtener resultados significativamente diferentes.

¿Qué debo cambiar para obtener los mismos coeficientes o más cercanos?

Sugeriría comparar su implementación con SGDClassifier(loss='log') primero, ya que LogisticRegression no ofrece el solucionador SGD. Aunque tenga en cuenta que la implementación de scikit-learn es más sofisticada, en particular, tiene más hiperparámetros para la detención anticipada como tol .

¿Cómo puedo establecer coeficientes iniciales, tasa de aprendizaje, n_epoch?

Por lo general, los coeficientes para SGD se inicializan aleatoriamente (p. ej., uniform(-1/(2n), 1/(2n)) ), usando algunas estadísticas de datos (p. ej., dot(y, w)/(dot(w, w) para cada coeficiente w ), o con los parámetros del modelo pre-entrenados. Por el contrario, no existe una regla de oro para la tasa de aprendizaje o el número de épocas. Por lo general, establecemos una gran cantidad de épocas y algún otro criterio de parada (por ejemplo, si la norma entre los coeficientes actuales y anteriores son más pequeños que algunos tol pequeños), una tasa de aprendizaje moderada, y en cada iteración reducimos la tasa de aprendizaje siguiendo alguna regla (consulte el parámetro learning_rate de SGDClassifier o la Guía del usuario ) y verificamos el criterio de parada.

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