如何使用来自 statsmodels 的 linear_model.OLS 使用 LinearRegression 预测数据
How to predict data using LinearRegression using linear_model.OLS from statsmodels
我是 运行 使用 statsmodel.api 的线性回归,我想用 sklearn 做同样的事情。但是,我似乎无法找到一种方法将我的模型应用于测试数据并获得 R 平方和其他东西。
这是我使用 sklearn 得到的东西,但找不到使用 statsmodel 进行复制的方法:
# import library
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# Create sample
X_R1, y_R1 = make_regression(n_samples = 100, n_features=1,n_informative=1, bias = 150.0, noise = 30, random_state=0)
# split train / test
X_train, X_test, y_train, y_test = train_test_split(X_R1, y_R1,random_state = 1)
# Roda o modelo
linreg = LinearRegression().fit(X_train, y_train)
# Apresenta as informacoes desejadas
print('linear model coeff (w): {}'.format(linreg.coef_))
print('linear model intercept (b): {:.3f}'.format(linreg.intercept_))
print('R-squared score (training): {:.3f}'.format(linreg.score(X_train, y_train)))
print('R-squared score (test): {:.3f}'.format(linreg.score(X_test, y_test)))
输出:
现在正在使用 statsmodel:
from sklearn import datasets, linear_model
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
from scipy import stats
X2 = sm.add_constant(X_train)
est = sm.OLS(y_train, X2)
est2 = est.fit()
print(est2.summary())
第二个脚本的输出比较完整,想用一下。但是我仍然需要将模型应用于测试数据。
很简单。您只需要 OLS
模型的 predict
方法。
使用这个:
from sklearn import datasets, linear_model
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
from scipy import stats
X2 = sm.add_constant(X_train)
est = sm.OLS(y_train, X2).fit() # this is a OLS object
X_test = sm.add_constant(X_test) # add again the constant
y_test_predicted = est.predict(X_test) # use the predict method of the object
OLS 对象的所有可用方法都可以在这里找到:https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLS.html#statsmodels.regression.linear_model.OLS
我是 运行 使用 statsmodel.api 的线性回归,我想用 sklearn 做同样的事情。但是,我似乎无法找到一种方法将我的模型应用于测试数据并获得 R 平方和其他东西。
这是我使用 sklearn 得到的东西,但找不到使用 statsmodel 进行复制的方法:
# import library
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# Create sample
X_R1, y_R1 = make_regression(n_samples = 100, n_features=1,n_informative=1, bias = 150.0, noise = 30, random_state=0)
# split train / test
X_train, X_test, y_train, y_test = train_test_split(X_R1, y_R1,random_state = 1)
# Roda o modelo
linreg = LinearRegression().fit(X_train, y_train)
# Apresenta as informacoes desejadas
print('linear model coeff (w): {}'.format(linreg.coef_))
print('linear model intercept (b): {:.3f}'.format(linreg.intercept_))
print('R-squared score (training): {:.3f}'.format(linreg.score(X_train, y_train)))
print('R-squared score (test): {:.3f}'.format(linreg.score(X_test, y_test)))
输出:
现在正在使用 statsmodel:
from sklearn import datasets, linear_model
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
from scipy import stats
X2 = sm.add_constant(X_train)
est = sm.OLS(y_train, X2)
est2 = est.fit()
print(est2.summary())
第二个脚本的输出比较完整,想用一下。但是我仍然需要将模型应用于测试数据。
很简单。您只需要 OLS
模型的 predict
方法。
使用这个:
from sklearn import datasets, linear_model
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
from scipy import stats
X2 = sm.add_constant(X_train)
est = sm.OLS(y_train, X2).fit() # this is a OLS object
X_test = sm.add_constant(X_test) # add again the constant
y_test_predicted = est.predict(X_test) # use the predict method of the object
OLS 对象的所有可用方法都可以在这里找到:https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLS.html#statsmodels.regression.linear_model.OLS