2012-11-04 64 views
7

我使用OLS(多元线性回归)计算了模型。我将我的数据分为训练和测试(各一半),然后我想预测下半部分标签的价值。使用具有统计模型的OLS模型预测值

model = OLS(labels[:half], data[:half]) 
predictions = model.predict(data[half:]) 

的问题是,我得到的和错误: 文件“/usr/local/lib/python2.7/dist-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/ statsmodels /回归/ linear_model.py”,线路281,在预测 返回np.dot(exog,则params) ValueError异常:矩阵不对准

我有以下阵列形状: data.shape:(426, 215) labels.shape:(426,)

如果我将输入转置为model.predict,我会得到结果但随着(426213)的形状,所以我想它的错误,以及(我希望213号的一个向量作为标签的预测):

model.predict(data[half:].T) 

不知道如何得到它的工作?

回答

11

对于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:]) 

或更短

results = OLS(labels[:half], data[:half]).fit() 
predictions = results.predict(data[half:]) 

http://statsmodels.sourceforge.net/stable/generated/statsmodels.regression.linear_model.RegressionResults.predict.html缺少文档字符串

注:这已经在开发版本(向后兼容),在预测,可以采取的“公式”信息优势被改变 http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.RegressionResults.predict.html

+0

虽然这是关于模型拟合和数据拆分的BIG WARNING问题的正确答案。您应该使用80%的数据(或更大的部分)进行培训/测试,20%(其余)用于测试/预测。将数据拆分为50:50就像Schrodingers猫。我们不相信我们的数据都是好的或全部错误的。 因此,对模型的信心处于中间的某个位置。我们希望对我们的模型有更好的信心,因此我们应该训练更多的数据然后进行测试。 – lukassos