尝试求解多元回归方程时出现 Mathnet 错误
Mathnet errors when trying to solve a multiple regression equation
我有以下代码,我正在尝试使用 2 种不同的方法来求解多元回归方程。数组太长而无法列出,但每个数组的计数在 5704 行处匹配。当我尝试 运行 代码
时出现以下错误
// getting 'System.ArgumentException' 类型的未处理异常发生在 MathNet.Numerics.dll
附加信息:矩阵必须是正定的。
double[] p = Fit.MultiDim(
new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
weekReturnList.ToArray(),
intercept: true);
// getting 'System.ArgumentException' 类型的未处理异常发生在 MathNet.Numerics.dll
附加信息:矩阵维度必须一致:3x5705。
double[] q = MultipleRegression.QR(
new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
weekReturnList.ToArray(),
intercept: true);
问题中的代码片段使用 3 个样本点(每个样本点有 5704 个值)计算回归,因此它期望 weekReturnList
的长度为 3。
但是,如果 weekReturnList
的长度也为 5704,并且您的数据实际上表示 5704 个数据点,每个数据点具有 3 个值(短、中、长),那么您需要转置输入。
我认为按列而不是数据点组织的数据在实践中很常见,因此我们也应该考虑在 Fit
class 中为这个用例添加一个快捷函数。
同时您可以使用以下方法,它通过从列数组而不是行数组创建设计矩阵来转置输入:
MultipleRegression.NormalEquations(
Matrix<double>.Build.DenseOfColumnArrays(shortRatingList, mediumRatingList, longRatingList),
Vector<double>.Build.Dense(weekReturnList));
我有以下代码,我正在尝试使用 2 种不同的方法来求解多元回归方程。数组太长而无法列出,但每个数组的计数在 5704 行处匹配。当我尝试 运行 代码
时出现以下错误// getting 'System.ArgumentException' 类型的未处理异常发生在 MathNet.Numerics.dll
附加信息:矩阵必须是正定的。
double[] p = Fit.MultiDim(
new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
weekReturnList.ToArray(),
intercept: true);
// getting 'System.ArgumentException' 类型的未处理异常发生在 MathNet.Numerics.dll
附加信息:矩阵维度必须一致:3x5705。
double[] q = MultipleRegression.QR(
new[] { shortRatingList.ToArray(), mediumRatingList.ToArray(), longRatingList.ToArray() },
weekReturnList.ToArray(),
intercept: true);
问题中的代码片段使用 3 个样本点(每个样本点有 5704 个值)计算回归,因此它期望 weekReturnList
的长度为 3。
但是,如果 weekReturnList
的长度也为 5704,并且您的数据实际上表示 5704 个数据点,每个数据点具有 3 个值(短、中、长),那么您需要转置输入。
我认为按列而不是数据点组织的数据在实践中很常见,因此我们也应该考虑在 Fit
class 中为这个用例添加一个快捷函数。
同时您可以使用以下方法,它通过从列数组而不是行数组创建设计矩阵来转置输入:
MultipleRegression.NormalEquations(
Matrix<double>.Build.DenseOfColumnArrays(shortRatingList, mediumRatingList, longRatingList),
Vector<double>.Build.Dense(weekReturnList));