Несколько независимых переменных / множественная линейная регрессия в Swift - PullRequest
1 голос
/ 19 сентября 2019

Я ищу библиотеку или код 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...