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

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

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 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!