Swift中的多个自变量/多元线性回归

时间:2019-09-19 01:37:37

标签: swift

我正在寻找 Swift 库或代码来实现多重线性回归。好吧,至少这是我我需要的。

现在我已经知道了,只需进行常规的线性回归即可:

private func linearRegression(_ xs: [Double], ys: [Double]) -> (Double) -> Double {


    let sum1 = average(multiply(ys, xs)) - average(xs) * average(ys)
    let sum2 = average(multiply(xs, xs)) - pow(average(xs), 2)
    let slope = sum1 / sum2
    let intercept = average(ys) - slope * average(xs)

    return { x in
        return slope * x + intercept
    }
}

private func multiply(_ a: [Double], _ b: [Double]) -> [Double] {
    return zip(a, b).map(*)
}
private func average(_ input: [Double]) -> Double {
    return input.reduce(0, +) / Double(input.count)
}


let heights: [Double] = [ 20.0, 44.0, 66.0 ]
let ages: [Double] = [ 0.1, 6.5, 12.0 ]

let calc = linearRegression(heights, ys: ages)
print(calc(66.0)) // 12.07

因此,在这种情况下,我输入了身高 xs ),输出/结果是 age (< strong>是)。

不过,我需要的是具有 2 个自变量-或2个输入。因此,我需要的不是“ 身高->年龄”,而是“ (身高,体重)->年龄”。

基本上,是这样的:

let heightsAndWeights: [Double] = [ 
    (20.0, 7.2),
    (44.0, 58.0), 
    (66.0, 160.0) 
]
let ages: [Double] = [ 0.1, 6.5, 12.0 ]

所以最后,我想采用适合的方式,选择身高体重,并恢复年龄到我的输入数据(上面的 heightsAndWeights )。

我一直在搜索stackoverflow和google,并找到了许多其他语言的实现,但是它们始终依赖于某些能够发挥作用的库。

在Ubuntu上运行的Swift 5。

0 个答案:

没有答案