使用 sklearn.linear_model.Ridge 的线性病态问题 - 描述训练数据的最佳方式?

linear ill-conditioned problems using sklearn.linear_model.Ridge - best way to describe training data?

问题陈述:我正在处理一个线性方程组,它对应于一个不适定的反问题。我可以在 Python 中手动应用 Tikhonov 正则化或岭回归,并获得对我的问题足够准确的测试数据的解决方案。我想尝试使用 sklearn.linear_model.Ridge 解决这个问题,因为我想尝试该包 (https://scikit-learn.org/stable/modules/linear_model.html) 的线性模型部分中的其他机器学习方法。我想知道在这种情况下使用 sklearn 是否使用了错误的工具。

我所做的:我阅读了 sklearn.linear_model.Ridge 的文档。因为我知道对应于正向问题的线性变换,所以我将 运行 用于脉冲响应以创建训练数据,然后将其提供给 sklearn.linear_model.Ridge 以生成模型。与我在 Python 中自己应用岭回归方程不同,sklearn.linear_model.Ridge 中的模型仅适用于脉冲响应。另一方面,我自己使用方程应用岭回归,生成一个可以应用于脉冲响应的任何线性组合的模型。

有没有办法应用 sklearn 的线性方法,而不需要生成代表问题的整个参数 space 的大型测试数据集,或者这是使用(甚至线性)的必要条件机器学习算法?

当 sklearn 方法应用于跨越正向问题的测试用例时,是否应该 sklearn.model.Ridge return 与求解岭回归方程的结果相同?

非常感谢任何能帮助我理解的人。

通过反复试验找到了答案。回答我自己的问题,以防有人像我一样思考并且需要澄清。

  1. 是的,如果你使用跨越问题 space 的训练数据,它与 python 中使用方程的 运行 岭回归相同。 sklearn 按照文档中的说明进行操作。

  2. 你需要用fit_intercept=True来得到sklearn.linear_model.Ridge来拟合你问题的Y截距,否则假定为零。

如果您使用默认值 fit_intercept=False,并且您的问题的 Y 轴截距不为零,您当然会得到一个糟糕的解决方案。

这可能会让像我这样的新手觉得您没有提供足够的训练数据,这是不正确的。