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

435
Vistas
¿Por qué la implementación de `sklearn` y `statsmodels` de la regresión OLS dan diferentes R^2?

Accidentalmente, noté que los modelos OLS implementados por sklearn y statsmodels arrojan diferentes valores de R ^ 2 cuando no se ajustan a la intercepción. Por lo demás, parece que funcionan bien. El siguiente código produce:

 import numpy as np import sklearn import statsmodels import sklearn.linear_model as sl import statsmodels.api as sm np.random.seed(42) N=1000 X = np.random.normal(loc=1, size=(N, 1)) Y = 2 * X.flatten() + 4 + np.random.normal(size=N) sklernIntercept=sl.LinearRegression(fit_intercept=True).fit(X, Y) sklernNoIntercept=sl.LinearRegression(fit_intercept=False).fit(X, Y) statsmodelsIntercept = sm.OLS(Y, sm.add_constant(X)) statsmodelsNoIntercept = sm.OLS(Y, X) print(sklernIntercept.score(X, Y), statsmodelsIntercept.fit().rsquared) print(sklernNoIntercept.score(X, Y), statsmodelsNoIntercept.fit().rsquared) print(sklearn.__version__, statsmodels.__version__)

huellas dactilares:

 0.78741906105 0.78741906105 -0.950825182861 0.783154483028 0.19.1 0.8.0

¿De dónde viene la diferencia?

La pregunta difiere de los diferentes coeficientes de regresión lineal con statsmodels y sklearn , ya que sklearn.linear_model.LinearModel (con intercepción) se ajustaba a X preparado como para statsmodels.api.OLS .

La pregunta difiere de Statsmodels: calcule los valores ajustados y R al cuadrado , ya que aborda la diferencia entre dos paquetes de Python ( statsmodels y scikit-learn ), mientras que la pregunta vinculada trata sobre statsmodels y la definición común de R^2. Ambos son respondidos por la misma respuesta, sin embargo, ese tema ya se ha discutido aquí: ¿La misma respuesta implica que las preguntas deben cerrarse como duplicadas?

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

0

Como señaló @ user333700 en los comentarios, la definición OLS de R^2 es diferente en la implementación de statsmodels que en la de scikit-learn .

De la documentación de la clase RegressionResults (énfasis mío):

R-cuadrado

R-cuadrado de un modelo con intercepto. Esto se define aquí como 1-ssr/centered_tss si la constante se incluye en el modelo y 1-ssr/uncentered_tss si se omite la constante .

De la documentación de LinearRegression.score() :

puntuación (X, y, sample_weight=Ninguno)

Devuelve el coeficiente de determinación R^2 de la predicción.

El coeficiente R^2 se define como (1 - u/v), donde u es el residuo

suma de cuadrados ((y_true - y_pred) ** 2).sum() y v es la suma total de cuadrados ((y_true - y_true.mean()) ** 2).sum(). La mejor puntuación posible es 1,0 y puede ser negativa (porque el modelo puede ser arbitrariamente peor). Un modelo constante que siempre prediga el valor esperado de y, sin tener en cuenta las características de entrada, obtendría una puntuación R^2 de 0,0.

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