Tengo una pregunta sobre dos métodos diferentes de diferentes bibliotecas que parece estar haciendo el mismo trabajo. Estoy tratando de hacer un modelo de regresión lineal.
Aquí está el código que uso la biblioteca de estadísticas con OLS:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)
x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()
print "GFT + Wiki / GT R-squared", results.rsquared
Esta impresión GFT + Wiki / GT R-squared 0.981434611923
y el segundo es el método de modelo lineal de la biblioteca de aprendizaje scikit:
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)
Esta impresión GFT + Wiki / GT R-cuadrado: 0.8543
Entonces, mi pregunta es que ambos métodos imprimen nuestro resultado R ^ 2, pero uno imprime 0.98 y el otro es 0.85.
Según tengo entendido, OLS trabaja con el conjunto de datos de entrenamiento. Entonces mis preguntas
- ¿Hay alguna manera que funcione con el conjunto de datos de prueba con OLS?
- ¿El puntaje del conjunto de datos de rastreo nos da algún significado (en OLS no utilizamos el conjunto de datos de prueba)? Según mi conocimiento anterior, tenemos que trabajar con datos de prueba.
- ¿Cuál es la diferencia entre OLS y la regresión lineal de scikit? ¿Cuál usamos para calcular la puntuación del modelo?
Gracias por cualquier ayuda.
fuente
exog
en la estimación y el pronóstico.En el modelo OLS está utilizando los datos de entrenamiento para ajustar y predecir.
Con el modelo LinearRegression, está utilizando datos de entrenamiento para ajustar y probar datos para predecir, por lo tanto, diferentes resultados en puntajes R2.
Si tomara datos de prueba en el modelo OLS, debería tener los mismos resultados y menor valor
fuente
He encontrado un problema similar en el que el OLS está dando diferentes valores de Rsquared y Rsquared ajustado en comparación con el modelo Sklearn LinearRegression.
Razón para ello: OLS no considera, por defecto, el coeficiente de intercepción y allí construye el modelo sin él y Sklearn lo considera al construir el modelo.
Solución: agregue una columna de 1 al conjunto de datos y ajuste el modelo con OLS y obtendrá casi el mismo Rsquared y Adj. Valores cuadrados para ambos modelos.
fuente