求解具有稀疏数据的方程组

数据挖掘 机器学习 回归 算法 遗传
2021-10-06 04:55:57

我正在尝试求解具有 40 个自变量 (x1, ..., x40) 和一个因变量 (y) 的一组方程。方程的总数(行数)约为 300,我想求解一组 40 个系数,以最小化 y 和预测值之间的总平方和误差。

我的问题是矩阵非常稀疏,我不知道用稀疏数据求解方程组的最佳方法。数据集的示例如下所示:

   y    x1  x2 x3 x4 x5 x6 ... x40
87169   14  0  1  0  0  2  ... 0 
46449   0   0  4  0  1  4  ... 12
846449  0   0  0  0  0  3  ... 0
....

我目前正在使用遗传算法来解决这个问题,结果出来的结果大约是观察到的和预期的两倍。

任何人都可以提出不同的方法或技术来解决具有稀疏数据的一组方程。

2个回答

如果我理解正确,这是使用稀疏数据稀疏回归)的多元线性回归的情况。假设,我希望您会发现以下资源很有用。

1) NCSU关于稀疏回归的讲座幻灯片,包括算法、注释、公式、图形和参考文献的概述:http: //www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf

2)R生态系统提供了许多,对稀疏回归分析很有用,包括:

3)包含稀疏回归解决方案示例的博客文章,基于SparseMhttp ://aleph-nought.blogspot.com/2012/03/multiple-linear-regression-with-sparse.html

4) 关于在 R 中使用稀疏矩阵的博客文章,其中包括使用入门glmnet http: //www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r

5)有关该主题的更多示例和一些讨论可以在StackOverflow上找到:https ://stackoverflow.com/questions/3169371/large-scale-regression-in-r-with-a-sparse-feature-matrix

更新(根据您的评论):

如果您尝试解决有约束的 LP 问题,您可能会发现这篇理论论文很有用:http ://web.stanford.edu/group/SOL/papers/gmsw84.pdf 。

另外,检查 R 包limSolvehttp ://cran.r-project.org/web/packages/limSolve 。而且,一般来说,检查CRAN 任务视图 “优化和数学编程”中的包:http: //cran.r-project.org/web/views/Optimization.html

最后,查看“Using R for Numerical Analysis in Science and Engineering”一书(Victor A. Bloomfield 着)。它有一节关于求解方程组,由稀疏矩阵表示(第 5.7 节,第 99-104 页),其中包括基于上述一些软件包的示例:http: //books.google.com/books? ID = 9ph_AwAAQBAJ&PG = PA99&LPG = PA99&DQ = R + limsolve +稀疏+矩阵&源= BL&OTS = PHDE8nXljQ&SIG = sPi4n5Wk0M02ywkubq7R7KD_b04&HL = EN&SA = X&EI = FZjiU-ioIcjmsATGkYDAAg&VED = 0CDUQ6AEwAw#v = onepage&q = R%20limsolve%20sparse%20matrix&F =假

亚历山大的回答是完全正确的。

但是,提出问题的方式意味着这是一个简单的普通最小二乘回归问题:最小化因变量和预测变量的线性组合之间的残差平方和。

现在,虽然您的设计矩阵中可能有许多零,但您的系统本身并不算太大:40 个预测变量的 300 个观察值不超过中等大小。您可以使用 R 运行这样的回归,而无需对稀疏数据进行任何特别的努力。只需使用lm()命令(对于“线性模型”)。用于?lm查看帮助页面。请注意,lm默认情况下会在您的设计矩阵(截距)中默默地添加一个常量列 --1在您的公式右侧包含一个以抑制这种情况。总体而言,假设您的所有数据(没有其他数据)都在data.frame被调用foo,您可以这样做:

model <- lm(y~.-1,data=foo)

然后你可以像这样查看参数估计等:

summary(model)
residuals(model)

如果您的系统更大,例如大约 10,000 个观测值和数百个预测变量,则按照Aleksandr 的回答查看专门的稀疏求解器可能开始有意义。

最后,在您对Aleksandr's answer的评论中,您提到了方程式的约束。如果这实际上是您的关键问题,那么有一些方法可以计算 R 中的约束最小二乘。我个人喜欢包pcls()中的内容mgcv也许您想编辑您的问题以包括您面临的约束类型(框约束、非负约束、完整性约束、线性约束......)?