Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

203
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!