Lineare Regressionsparameter in C berechnen

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie die Parameter der linearen Regression, einschließlich der Steigung (m) und des Achsenabschnitts (b), mit der Programmiersprache C berechnen können. Das Lab behandelt den schrittweisen Prozess des Einlesens von (x,y)-Datenpunkten, der Berechnung der Steigung und des Achsenabschnitts sowie des Ausgebens der linearen Regressionsgleichung im Format y = mx + b. Dieses Lab bietet einen praktischen Ansatz zur statistischen Datenanalyse und -modellierung mit C, einer weit verbreiteten Programmiersprache.

Einlesen von (x,y)-Datenpunkten

In diesem Schritt lernen Sie, wie Sie (x,y)-Datenpunkte für die lineare Regressionsanalyse in C einlesen können. Wir werden ein Programm erstellen, das die Eingabe mehrerer Datenpunkte ermöglicht und diese zur weiteren Berechnung speichert.

Zunächst erstellen wir eine C-Datei, um das Einlesen der Datenpunkte zu implementieren:

cd ~/project
nano linear_regression.c

Fügen Sie nun den folgenden Code zur Datei hinzu:

#include <stdio.h>
#define MAX_POINTS 100

typedef struct {
    double x;
    double y;
} DataPoint;

int main() {
    DataPoint points[MAX_POINTS];
    int num_points = 0;

    printf("Enter x and y coordinates (enter -1 -1 to finish):\n");

    while (num_points < MAX_POINTS) {
        double x, y;
        scanf("%lf %lf", &x, &y);

        if (x == -1 && y == -1) {
            break;
        }

        points[num_points].x = x;
        points[num_points].y = y;
        num_points++;
    }

    printf("\nData Points Entered:\n");
    for (int i = 0; i < num_points; i++) {
        printf("Point %d: (%.2f, %.2f)\n", i+1, points[i].x, points[i].y);
    }

    return 0;
}

Kompilieren Sie das Programm:

gcc -o linear_regression linear_regression.c

Führen Sie das Programm aus und geben Sie einige Beispiel-Datenpunkte ein:

./linear_regression

Beispielausgabe:

Enter x and y coordinates (enter -1 -1 to finish):
1 2
2 4
3 5
4 4
5 5
-1 -1

Data Points Entered:
Point 1: (1.00, 2.00)
Point 2: (2.00, 4.00)
Point 3: (3.00, 5.00)
Point 4: (4.00, 4.00)
Point 5: (5.00, 5.00)

Lassen Sie uns die wichtigsten Bestandteile dieses Codes analysieren:

  1. Wir definieren eine DataPoint-Struktur, um die x- und y-Koordinaten zu speichern.
  2. MAX_POINTS begrenzt die Anzahl der Datenpunkte, um Überläufe zu vermeiden.
  3. Das Programm verwendet eine while-Schleife, um die Koordinaten einzulesen.
  4. Benutzer können Datenpunkte eingeben und die Eingabe beenden, indem sie -1 -1 eingeben.
  5. Das Programm gibt alle eingegebenen Datenpunkte zur Überprüfung aus.

Berechnung der Steigung (m) und des Achsenabschnitts (b)

In diesem Schritt lernen Sie, wie Sie die Steigung (m) und den Achsenabschnitt (b) für die lineare Regression mit der Methode der kleinsten Quadrate berechnen können.

Zunächst aktualisieren Sie die vorherige linear_regression.c-Datei:

cd ~/project
nano linear_regression.c

Ersetzen Sie den vorherigen Code durch die folgende Implementierung:

#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100

typedef struct {
    double x;
    double y;
} DataPoint;

// Function to compute linear regression parameters
void computeLinearRegression(DataPoint points[], int num_points, double *m, double *b) {
    double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x_squared = 0;

    for (int i = 0; i < num_points; i++) {
        sum_x += points[i].x;
        sum_y += points[i].y;
        sum_xy += points[i].x * points[i].y;
        sum_x_squared += points[i].x * points[i].x;
    }

    double n = num_points;

    // Compute slope (m)
    *m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x * sum_x);

    // Compute y-intercept (b)
    *b = (sum_y - (*m) * sum_x) / n;
}

int main() {
    DataPoint points[MAX_POINTS];
    int num_points = 0;

    printf("Enter x and y coordinates (enter -1 -1 to finish):\n");

    while (num_points < MAX_POINTS) {
        double x, y;
        scanf("%lf %lf", &x, &y);

        if (x == -1 && y == -1) {
            break;
        }

        points[num_points].x = x;
        points[num_points].y = y;
        num_points++;
    }

    double slope, intercept;
    computeLinearRegression(points, num_points, &slope, &intercept);

    printf("\nLinear Regression Results:\n");
    printf("Number of points: %d\n", num_points);
    printf("Slope (m): %.4f\n", slope);
    printf("Y-Intercept (b): %.4f\n", intercept);
    printf("Equation: y = %.4fx + %.4f\n", slope, intercept);

    return 0;
}

Kompilieren Sie das Programm mit der Mathematikbibliothek:

gcc -o linear_regression linear_regression.c -lm

Führen Sie das Programm mit Beispiel-Datenpunkten aus:

./linear_regression

Beispielausgabe:

Enter x and y coordinates (enter -1 -1 to finish):
1 2
2 4
3 5
4 4
5 5
-1 -1

Linear Regression Results:
Number of points: 5
Slope (m): 0.6000
Y-Intercept (b): 2.2000
Equation: y = 0.6000x + 2.2000

Wichtige Punkte zur Berechnung der linearen Regression:

  1. Wir verwenden die Methode der kleinsten Quadrate, um die Steigung und den Achsenabschnitt zu berechnen.
  2. Die Formel für die Steigung lautet: m = (n _ Σ(xy) - Σx _ Σy) / (n * Σ(x²) - (Σx)²)
  3. Die Formel für den y-Achsenabschnitt lautet: b = (Σy - m * Σx) / n
  4. Die Funktion computeLinearRegression() berechnet diese Parameter.
  5. Die Hauptfunktion gibt die Regressionsgleichung aus.

Ausgabe von y = mx + b

In diesem Schritt lernen Sie, wie Sie die lineare Regressionsgleichung ausgeben und y-Werte mithilfe der berechneten Steigung und des Achsenabschnitts vorhersagen können.

Aktualisieren Sie die linear_regression.c-Datei, um die Vorhersagefunktionalität hinzuzufügen:

cd ~/project
nano linear_regression.c

Ersetzen Sie den vorherigen Code durch die folgende Implementierung:

#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100

typedef struct {
    double x;
    double y;
} DataPoint;

void computeLinearRegression(DataPoint points[], int num_points, double *m, double *b) {
    double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x_squared = 0;

    for (int i = 0; i < num_points; i++) {
        sum_x += points[i].x;
        sum_y += points[i].y;
        sum_xy += points[i].x * points[i].y;
        sum_x_squared += points[i].x * points[i].x;
    }

    double n = num_points;

    *m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x * sum_x);
    *b = (sum_y - (*m) * sum_x) / n;
}

// Function to predict y value
double predictY(double m, double b, double x) {
    return m * x + b;
}

int main() {
    DataPoint points[MAX_POINTS];
    int num_points = 0;

    printf("Enter x and y coordinates (enter -1 -1 to finish):\n");

    while (num_points < MAX_POINTS) {
        double x, y;
        scanf("%lf %lf", &x, &y);

        if (x == -1 && y == -1) {
            break;
        }

        points[num_points].x = x;
        points[num_points].y = y;
        num_points++;
    }

    double slope, intercept;
    computeLinearRegression(points, num_points, &slope, &intercept);

    printf("\nLinear Regression Equation:\n");
    printf("y = %.4fx + %.4f\n", slope, intercept);

    // Print prediction for sample x values
    printf("\nPredicted y values:\n");
    double test_x_values[] = {0, 2.5, 6, 10};
    for (int i = 0; i < 4; i++) {
        double predicted_y = predictY(slope, intercept, test_x_values[i]);
        printf("When x = %.2f, y = %.4f\n", test_x_values[i], predicted_y);
    }

    return 0;
}

Kompilieren Sie das Programm:

gcc -o linear_regression linear_regression.c -lm

Führen Sie das Programm mit Beispiel-Datenpunkten aus:

./linear_regression

Beispielausgabe:

Enter x and y coordinates (enter -1 -1 to finish):
1 2
2 4
3 5
4 4
5 5
-1 -1

Linear Regression Equation:
y = 0.6000x + 2.2000

Predicted y values:
When x = 0.00, y = 2.2000
When x = 2.50, y = 3.7000
When x = 6.00, y = 5.8000
When x = 10.00, y = 8.2000

Wichtige Punkte zur Ausgabe der Regressionsgleichung:

  1. Wir haben eine predictY()-Funktion hinzugefügt, um y für einen beliebigen gegebenen x-Wert zu berechnen.
  2. Die Hauptfunktion gibt die vollständige Gleichung aus: y = mx + b.
  3. Wir demonstrieren die Vorhersage, indem wir y-Werte für verschiedene x-Eingaben anzeigen.
  4. Die Ausgabe bietet eine klare Visualisierung des linearen Regressionsmodells.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie (x,y)-Datenpunkte für die lineare Regressionsanalyse in C einlesen können. Sie haben ein Programm erstellt, das die Eingabe mehrerer Datenpunkte ermöglicht und diese zur weiteren Berechnung speichert. Sie haben auch gelernt, wie Sie die eingegebenen Datenpunkte zur Überprüfung ausgeben können.

Als Nächstes werden Sie lernen, wie Sie die Steigung (m) und den Achsenabschnitt (b) der linearen Regressionsgeraden berechnen und dann die Gleichung in der Form y = mx + b ausgeben können.