cvxpy调用mosek做线性回归报下界为nan错误该如何解决
报错排查点
- 优先检查输入数据是否存在非数值:分别执行
print(np.isnan(A).any(), np.isnan(R).any(), np.isinf(A).any(), np.isinf(R).any()),如果任意返回True,说明输入的回归因子矩阵A或者标签R里存在NaN/无穷值,这是触发该报错的最常见原因,需要先对数据集做缺失值填充或异常样本删除处理。 - 检查变量约束的写法是否适配版本:可以将非负约束的定义方式替换为变量初始化时直接指定非负,即把
x = cp.Variable(len(regressors))修改为x = cp.Variable(len(regressors), nonneg=True),同时删除后续的x >= 0约束,部分旧版本cvxpy传递独立约束给mosek时会出现参数解析异常。 - 验证数据类型合法性:打印
A.dtype和R.dtype,确认两者都是数值类型(float/int),如果存在object类型,说明你选中的regressors列里混有非数值内容,需要先做数据清洗。 - 确认回归因子列不存在全0/方差为0的异常列:如果某列回归因子全部为0,会导致求解过程中出现数值计算异常,进而识别为NaN下界。
- 升级依赖包版本:将cvxpy和mosek都升级到最新稳定版,避免已知的版本兼容Bug。
内容的提问来源于stack exchange,提问作者Taylor Fang
相关产品推荐
相关产品推荐

