Я ищу библиотеку или код 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 ) и вывод / результат возраст ( ys ).
Что мне нужно, так это иметь 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 и нашел ряд реализаций на других языках, но они всегда зависят от какой-то библиотеки, котораяделает магию.
Swift 5, работает на Ubuntu.