nic*_*ckb 11 python linear-regression pandas statsmodels
我使用OLS(多元线性回归)计算了一个模型.我将数据分为训练和测试(每半个),然后我想预测标签的下半部分的值.
model = OLS(labels[:half], data[:half])
predictions = model.predict(data[half:])
Run Code Online (Sandbox Code Playgroud)
问题是我得到并且错误:文件"/usr/local/lib/python2.7/dist-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/regression/linear_model.py" ,第281行,预测返回np.dot(exog,params)ValueError:矩阵未对齐
我有以下数组形状:data.shape:(426,215)labels.shape:(426,)
如果我将输入转置为model.predict,我会得到一个结果,但形状为(426,213),所以我认为它也是错误的(我希望一个213个数字的向量作为标签预测):
model.predict(data[half:].T)
Run Code Online (Sandbox Code Playgroud)
知道如何让它工作吗?
Jos*_*sef 16
对于statsmodels> = 0.4,如果我没记错的话
model.predict
不知道参数,并在调用中要求它们参见http://statsmodels.sourceforge.net/stable/generated/statsmodels.regression.linear_model.OLS.predict.html
在您的情况下应该适用的是拟合模型,然后使用结果实例的预测方法.
model = OLS(labels[:half], data[:half])
results = model.fit()
predictions = results.predict(data[half:])
Run Code Online (Sandbox Code Playgroud)
或更短
results = OLS(labels[:half], data[:half]).fit()
predictions = results.predict(data[half:])
Run Code Online (Sandbox Code Playgroud)
注意:这在开发版本(向后兼容)中已经更改,可以利用预测http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.RegressionResults.predict中的"公式"信息 . HTML
您还可以调用对象get_prediction
的方法Results
来获取预测及其误差估计和置信区间。例子:
import numpy as np
import statsmodels.api as sm
X = np.array([0, 1, 2, 3])
y = np.array([1, 2, 3.5, 4])
X = sm.add_constant(X)
model = sm.OLS(y, X)
results = model.fit()
Run Code Online (Sandbox Code Playgroud)
预测:
# Predict at x=2.5
X_test = np.array([1, 2.5]) # "1" refers to the intercept term
results.get_prediction(X_test).summary_frame(alpha=0.05) # alpha = significance level for confidence interval
Run Code Online (Sandbox Code Playgroud)
给出:
mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower obs_ci_upper
0 3.675 0.198431 2.821219 4.528781 2.142416 5.207584
Run Code Online (Sandbox Code Playgroud)
其中mean_ci
指置信区间,obs_ci
指预测区间。