我正在尝试使用scikit-learn中包含的广义线性模型拟合方法拟合向量自回归(VAR)模型 . 线性模型的形式为y = X w,但系统矩阵 X 具有非常奇特的结构:它是块对角线,并且所有块都是相同的 . 为了优化性能和内存消耗,模型可以表示为 Y = BW ,其中 B 是来自 X 的块, Y 和 W 现在是矩阵而不是向量 . LinearRegression,Ridge,RidgeCV,Lasso和ElasticNet类很容易接受后一种模型结构 . 但是,由于Y是二维的,因此适合LassoCV或ElasticNetCV失败 .
我发现https://github.com/scikit-learn/scikit-learn/issues/2402从这个讨论中我假设LassoCV / ElasticNetCV的行为是有意的 . 除了手动实现交叉验证之外,有没有办法优化alpha / rho参数?
此外,scikit-learn中的贝叶斯回归技术也期望y是一维的 . 有没有办法解决?
注意:我使用scikit-learn 0.14(稳定)
2 回答
使用这种回归公式获得的性能和内存优化有多重要?鉴于你的重新制定打破了scikit-learn,我不会把它称为优化...我建议:
运行未优化的版本并等待(如果可能) .
Git拉下面的code,据说可以解决你的问题 . 它是在您从scikit-learn github项目发布的对话中引用的 . 有关构建scikit的说明,请参阅here - 从git pull中学习 . 然后,您可以将分支scikit-learn位置添加到python路径,并使用修改后的库代码执行回归 . 务必发布您的经历和遇到的任何问题;我相信scikit开发人员会很感激 .
为了预测矩阵而不是向量,Lasso和ElasticNet就是他们的MultiTask *对应物:
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskLasso.html http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskElasticNet.html