sklearn scikit ols multiple machine learning example python pandas linear-regression statsmodels

ols - python scikit linear regression example



¿Por qué obtengo solo un parámetro de un statsmodels OLS fit (5)

Esto es lo que estoy haciendo:

$ python Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin >>> import statsmodels.api as sm >>> statsmodels.__version__ ''0.5.0'' >>> import numpy >>> y = numpy.array([1,2,3,4,5,6,7,8,9]) >>> X = numpy.array([1,1,2,2,3,3,4,4,5]) >>> res_ols = sm.OLS(y, X).fit() >>> res_ols.params array([ 1.82352941])

Esperaba una matriz con dos elementos?!? ¿La intersección y el coeficiente de pendiente?


Estoy ejecutando 0.6.1 y parece que la función "add_constant" se ha movido al módulo statsmodels.tools. Esto es lo que funcionó que funcionó:

res_ols = sm.OLS(y, statsmodels.tools.add_constant(X)).fit()


Intenta esto, funcionó para mí:

import statsmodels.formula.api as sm from statsmodels.api import add_constant X_train = add_constant(X_train) X_test = add_constant(X_test) model = sm.OLS(y_train,X_train) results = model.fit() y_pred=results.predict(X_test) results.params



Solo para ser completo, esto funciona:

>>> import numpy >>> import statsmodels.api as sm >>> y = numpy.array([1,2,3,4,5,6,7,8,9]) >>> X = numpy.array([1,1,2,2,3,3,4,4,5]) >>> X = sm.add_constant(X) >>> res_ols = sm.OLS(y, X).fit() >>> res_ols.params array([-0.35714286, 1.92857143])

Me da un coeficiente de pendiente diferente, pero supongo que las cifras como ahora tenemos una intersección.


X = sm.add_constant(X) el código X = sm.add_constant(X) pero Python no devolvió el valor de intercepción, por lo que, usando un poco de álgebra, decidí hacerlo yo mismo en el código:

este código calcula la regresión en 35 muestras, 7 características más un valor de intercepción que agregué como característica a la ecuación:

import statsmodels.api as sm from sklearn import datasets ## imports datasets from scikit-learn import numpy as np import pandas as pd x=np.empty((35,8)) # (numSamples, oneIntercept + numFeatures)) feature_names = np.empty((8,)) y = np.empty((35,)) dbfv = open("dataset.csv").readlines() interceptConstant = 1; i = 0 # reading data and writing in numpy arrays while i<len(dbfv): cells = dbfv[i].split(",") j = 0 x[i][j] = interceptConstant feature_names[j] = str(j) while j<len(cells)-1: x[i][j+1] = cells[j] feature_names[j+1] = str(j+1) j += 1 y[i] = cells[len(cells)-1] i += 1 # creating dataframes df = pd.DataFrame(x, columns=feature_names) target = pd.DataFrame(y, columns=["TARGET"]) X = df y = target["TARGET"] model = sm.OLS(y, X).fit() print(model.params) # predictions = model.predict(X) # make the predictions by the model # Print out the statistics print(model.summary())