我正在寻找 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。