【发布时间】:2016-03-13 12:30:13
【问题描述】:
我的名为 ds_f 的数据集是一个 840x57 矩阵,其中包含 NaN 值。我想用线性回归模型预测一个变量,但是当我尝试拟合模型时,我收到这条消息“SVD 没有收敛”:
X = ds_f[ds_f.columns[:-1]]
y = ds_f['target_o_tempm']
model = sm.OLS(y,X) #stackmodel
f = model.fit() #ERROR
所以我一直在寻找将掩码应用于 DataFrame 的答案。虽然我正在考虑创建一个掩码来“忽略”NaN 值,然后将其转换为 DataFrame,但我得到了与 ds_f 相同的 DataFrame,没有任何变化:
m = ma.masked_array(ds_f, np.isnan(ds_f))
m_ds_f = pd.DataFrame(m,columns=ds_f.columns)
编辑:我已经通过编写 model=sm.OLS(X,y,missing='drop') 解决了这个问题,但是当我显示结果时出现了一个新问题,我只得到 NaN:
【问题讨论】:
-
你在使用
statsmodels吗?如果是这样,您可以指定sm.OLS(y, X, missing='drop'),以在估计之前删除NaN值。或者,您可能需要考虑对缺失值进行插值,而不是删除它们。 -
你已经成功了,我应该在这个问题之前探索 statsmodels。非常感谢!
-
让我将其发布为答案,以便您关闭问题!我很高兴你设法解决了这个问题:)。
-
实际上我对使用 drop 方法时的结果持怀疑态度......而且考虑到数据内容,我无法真正进行插值......(检查上面的编辑)
-
汇总表中显示的推理问题很可能是因为您完全拟合数据并且误差方差为零。您拥有与观察相同数量的变量。 (nans 最有可能来自某个地方的零除法)它应该仍然可以使用
predict。您可以通过一些示例验证它是否按预期进行估计,例如稍微干扰一个值。
标签: python-2.7 python-3.x pandas linear-regression masked-array