我是初学者,我正在使用python中的statsmodel.formula.api.OLS()函数构建线性回归模型 . 我适合训练数据的模型,并在y_test(我的测试数据)上使用predict()函数来获得我的预测值 . 我将预测值存储在y_pred中 .
import statsmodels.formula.api as sm
result = sm.OLS(y_train, train_new).fit()
y_pred = result.predict(test_new)
当我尝试打印y_pred时,它以一个numpy数组形式出现,而y_test是pandas数据帧格式 .
In[44]: type(y_pred)
Out[44]: numpy.ndarray
In[45]:type(y_test)
Out[45]: pandas.core.series.Series
我想创建一个新的Pandas数据帧,它将y_test作为一列,将y_pred作为另一列,彼此相邻,并将其存储到csv文件中,这样就可以更容易地在相邻列中并排比较它们 . 但是,当我尝试
pd.DataFrame(y_pred, y_test, columns=['predictions', 'actual']).to_csv('prediction.csv')
我明白了
ValueError: Shape of passed values is (1, 5039), indices imply (2, 5039)
当我尝试将y_pred数组转换为数据帧,然后使用连接到y_test数据帧时
pd.concat([df1, df2], axis=1)
我得到一个空白的y_test空单元格列,与y_pred的值相邻 . 无论我尝试什么,我都无法生成具有两个相邻实际值和预测值的数据帧/ csv文件 . 你们的人建议什么?
1 回答
如果你看一下pd.DataFrame的参数,你会看到上面一行(df构造部分)实际上是:
这是因为
y_test
是第二个参数,你需要以某种方式告诉大熊猫它应该包含在数据中 . 否则,您只传递一个列表作为数据,并且您有两个列名称 - 因此您有错误 . 将两个列表作为两列传递的简单方法是使用字典: