You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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(如逻辑回归),场景不匹配也是潜在问题。

修正方案

  1. 必须先调用Learn()方法拟合数据,完成模型训练
  2. 根据场景选择正确的预测方法:回归场景用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:12