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

如何在Quantrix中使用Groovy实现Simple Linear Regression自定义函数

简单线性回归自定义函数问题排查与实现方案

现有代码问题说明

  • 第一版代码问题:
    1. 未实现slope()、intercept()两个核心计算函数,属于逻辑缺失
    2. 参数类型错误:计算回归需要至少2组样本,因此因变量、自变量应为数组类型,而非单个double值
    3. 语法错误:变量声明重复书写double关键字,不符合语法规范
  • 第二版代码问题:
    1. 调用的SimpleRegression属于Apache Commons Math第三方类,未导入依赖时无法识别
    2. 参数仍为单个double值,无法传入多组样本计算回归系数
  • 第三版测试代码问题:
    1. 未导入Apache Commons Math的SimpleRegression类,编译器无法识别该类
    2. 实例化类时遗漏new关键字,语法错误
    3. 仅传入1组样本点,无法计算线性回归系数
    4. 存在无意义的空addData()调用

可直接运行的实现方案

方案1:原生Groovy实现(无额外依赖,推荐Quantrix环境使用)

无需导入任何第三方库,直接复制即可在Groovy环境中运行,支持多组样本输入:

// 入参说明:y为因变量数组,x为自变量数组,xTest为待预测的x值
double simpleLinearRegression(double[] y, double[] x, double xTest) {
    // 校验样本数量一致且不少于2组
    if (y.size() != x.size() || y.size() < 2) {
        throw new IllegalArgumentException("样本数量需一致且不少于2组")
    }
    int n = y.size()
    // 计算x、y的平均值
    double xMean = x.sum() / n
    double yMean = y.sum() / n
    // 计算斜率和截距
    double numerator = 0
    double denominator = 0
    for (int i = 0; i < n; i++) {
        numerator += (x[i] - xMean) * (y[i] - yMean)
        denominator += Math.pow(x[i] - xMean, 2)
    }
    double slope = numerator / denominator
    double intercept = yMean - slope * xMean
    // 返回预测结果
    return intercept + slope * xTest
}

方案2:基于Apache Commons Math实现(需环境已导入commons-math3依赖)

如果你的Quantrix环境已经引入了Apache Commons Math库,可以直接调用官方封装好的类:

// 首先导入依赖类
import org.apache.commons.math3.stat.regression.SimpleRegression

double simpleLinearRegression(double[] y, double[] x, double xTest) {
    if (y.size() != x.size() || y.size() < 2) {
        throw new IllegalArgumentException("样本数量需一致且不少于2组")
    }
    SimpleRegression regression = new SimpleRegression()
    // 批量添加样本数据
    for (int i = 0; i < x.size(); i++) {
        regression.addData(x[i], y[i])
    }
    return regression.predict(xTest)
}

使用示例

// 样本示例:x=[1,2,3,4,5], y=[2,4,5,4,5],预测x=6时的y值
double[] x = [1,2,3,4,5] as double[]
double[] y = [2,4,5,4,5] as double[]
double predict = simpleLinearRegression(y, x, 6)
println predict // 输出结果约为5.8

内容的提问来源于stack exchange,提问作者Hector Devough

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:54:03