如何使用Accord.Net的GeneralizedLinearRegression类?数组越界错误求助
使用Accord.Net GeneralizedLinearRegression时的索引越界问题解决建议
问题场景
- 环境:Visual Studio 2022 Professional + VB.NET
- 使用Accord.Net的
GeneralizedLinearRegression类,缺少对应使用示例 - 已构造输入数组
inputs(13)(10)(13个样本,每个含10个特征)和输出数组outputs(13),调用Probability()方法时触发System.IndexOutOfRangeException,即使不接收返回值也会报错
用户原代码:
Public Sub Compute_GLM2(mz As Double) Dim inputs()() As Double = Get_GLM_Inputs(mz) Dim outputs As Double() = Get_GLM_Outputs(mz) Dim link As New Accord.Statistics.Links.IdentityLinkFunction Dim regression = New GeneralizedLinearRegression(link) Dim prob As Double() = regression.Probability(inputs, outputs) End Sub
问题根源
直接调用Probability()前未训练模型,此时回归器内部未初始化模型参数,无法处理输入数据,导致索引越界。另外,你使用的IdentityLinkFunction适用于线性回归(回归场景),而Probability()方法多用于分类场景的GLM(如逻辑回归),场景不匹配也是潜在问题。
修正方案
- 必须先调用
Learn()方法拟合数据,完成模型训练 - 根据场景选择正确的预测方法:回归场景用
Predict(),分类场景用Probability()
修正后的代码示例:
Public Sub Compute_GLM2(mz As Double) Dim inputs()() As Double = Get_GLM_Inputs(mz) Dim outputs As Double() = Get_GLM_Outputs(mz) ' 实例化适用于线性回归的链接函数和回归器 Dim link As New Accord.Statistics.Links.IdentityLinkFunction Dim regression = New GeneralizedLinearRegression(link) ' 关键步骤:训练模型拟合输入输出数据 regression.Learn(inputs, outputs) ' 回归场景下使用Predict获取预测值 Dim predictions As Double() = regression.Predict(inputs) ' 若为分类场景(如逻辑回归),需更换链接函数并使用Probability: ' Dim link As New Accord.Statistics.Links.LogLinkFunction ' Dim regression = New GeneralizedLinearRegression(link) ' regression.Learn(inputs, outputs) ' Dim prob As Double() = regression.Probability(inputs) End Sub
额外注意事项
- 确保
inputs的每个子数组长度一致(所有样本的特征数相同) - 确保
inputs的样本数量和outputs的元素数量严格匹配(此处均为13个)
内容的提问来源于stack exchange,提问作者Robert Cody
相关产品推荐
相关产品推荐

