作者Toby,原文来源公众号:python风控模型,ngboost LinAlgError: Singular matrix报错解决方案
各位同学大家好,之前有学员咨询ngboost模型运行报错LinAlgError: Singular matrix。
LinAlgError: Singular matrix
概述
LinAlgError: Singular matrix
是一个错误信息,通常在使用 Python 的 NumPy 或 SciPy 库进行线性代数运算时出现。这个错误表明你尝试进行的运算涉及到了一个奇异矩阵(singular matrix),也就是说,这个矩阵是不可逆的。
奇异矩阵是指其行列式(determinant)为零的矩阵,这意味着它没有逆矩阵。在许多线性代数运算中,如果涉及到奇异矩阵,就会导致错误或无法计算结果。
以下是一些可能导致这个错误的常见情况:
-
矩阵求逆:
-
尝试求一个奇异矩阵的逆矩阵。
-
-
解线性方程组:
-
尝试解一个系数矩阵为奇异矩阵的线性方程组。
-
-
计算特征值:
-
尝试计算一个奇异矩阵的特征值。
-
-
计算伪逆:
-
使用
numpy.pinv
或scipy.linalg.pinv
等函数计算奇异矩阵的伪逆。
-
-
矩阵分解:
-
尝试对奇异矩阵进行分解,如 QR 分解、Cholesky 分解等。
-
解决方案
如下代码,参数natural_gradient = False即可解决问题。如下图,ngboost完美训练模型,并得到预测结果。
ngb = NGBClassifier(n_estimators=500,natural_gradient = False)
自然梯度natural_gradient
NGBoost 是一种新的提升算法,它使用自然梯度提升,一种用于概率预测的模块化提升算法。该算法由基学习器、参数概率分布和评分规则组成。
普通梯度可能非常不适合学习多参数概率分布(例如正态分布)。如上面的概率回归示例所示,使用自然梯度的训练动态往往更加稳定并产生更好的拟合。
自然梯度和传统指标方面的竞争表现
与竞争方法相比,NGBoost 所需的专业知识要少得多,并且在常见的基准测试中表现同样出色。NGBoost 在较小的数据集上具有特别强的性能。
总结
总结,ngboost模型遇到 LinAlgError: Singular matrix报错时,尝试natural_gradient = False,关闭自然梯度功能。ngboost是2019年算法,也是集成树的最新算法。Toby老师在大量项目和实验中发现ngboost很多功能并不完善,整体接口支持不如xgboost,lightgbm,catboost完善。自然梯度是ngboost的最大特征,关闭了有点可惜,也期待ngboost的美国斯坦福团队继续改进和优化算法。
版权声明:文章来自公众号(python风控模型),未经许可,不得抄袭。遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。