Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

426
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda