[PHP] Regresja liniowa

Regresja liniowa jest jedną z najpopularniejszych i najprostszych metod analizy statystycznej, która pozwala na modelowanie zależności liniowej między dwiema zmiennymi. Polega ona na dopasowaniu linii prostej do danych, aby znaleźć optymalny model, który najlepiej opisuje tę zależność.

W regresji liniowej współczynnik a określa nachylenie linii, czyli jak bardzo wartość zmiennej zależnej zmienia się w odpowiedzi na zmianę zmiennej niezależnej. Współczynnik b określa punkt przecięcia linii z osią Y, czyli wartość zmiennej zależnej, gdy zmienna niezależna wynosi zero.

Ocena jakości dopasowania regresji liniowej często opiera się na współczynniku determinacji R2, który wskazuje, jak wiele zmienności zmiennej zależnej jest wyjaśniane przez model.

Regresja liniowa ma wiele zastosowań w różnych dziedzinach, takich jak ekonomia, nauki społeczne, nauki przyrodnicze i inżynieria.

Zobacz poniższy przykład algorytmu do obliczania regresji liniowej w PHP, w którym dane treningowe składają się z dwóch tablic: $x zawierającej wartości x i $y zawierającej odpowiadające im wartości y. Skrypt oblicza współczynniki a i b dla regresji liniowej, gdzie y = ax + b. Ponadto używając współczynników a i b z regresji liniowej, obliczamy predykcję dla zmiennej zależnej $predictionY.

<?php

// Dane treningowe
$x = [1, 2, 3, 4, 5];
$y = [2, 4, 6, 8, 10];

// Funkcja do obliczania współczynników regresji
function linearRegression($x, $y) {

    // Obliczanie średnich wartości
    $n = count($x);
    $sumX = array_sum($x);
    $sumY = array_sum($y);
    $meanX = $sumX / $n;
    $meanY = $sumY / $n;

    // Obliczanie współczynników regresji
    $numerator = 0;
    $denominator = 0;

    for($i = 0; $i < $n; $i++) {
    
        $numerator += ($x[$i] - $meanX) * ($y[$i] - $meanY);
        $denominator += pow($x[$i] - $meanX, 2);
        
    }

    $a = $numerator / $denominator;
    $b = $meanY - ($a * $meanX);

    // Obliczanie współczynnika determinacji (R2)
    $ssTotal = 0;
    $ssResidual = 0;

    for ($i = 0; $i < $n; $i++) {
        $yPred = $b + ($a * $x[$i]);
        $ssTotal += pow($y[$i] - $meanY, 2);
        $ssResidual += pow($y[$i] - $yPred, 2);
        
    }

    $rSquared = 1 - ($ssResidual / $ssTotal);

    // Zwracanie wyników w tablicy
    return ['a' => $a, 'b' => $b, 'rSquared' => $rSquared];
    
}

// Wywołanie funkcji do obliczenia współczynników regresji
$regression = linearRegression($x, $y);

// Wyświetlanie wyników
echo "Współczynniki regresji:\n";
echo "a (slope): " . $regression['a'] . "\n";
echo "b (intercept): " . $regression['b'] . "\n";
echo "Współczynnik determinacji: " . $regression['rSquared'] . "\n";

// Przykładowa predykcja wartości na podstawie wcześniej nauczonych współczynników
$predictionX = 6;
$predictedY = $regression['b'] + ($regression['a'] * $predictionX);
echo "Przewidywana wartość dla x = " . $predictionX . ": " . $predictedY . "\n";

Komentarze

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wstawić obrazek?

[JavaScript|Node.js] Generowanie kodów QR w Node.js z użyciem biblioteki qrcode