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:
- Wir definieren eine
DataPoint-Struktur, um die x- und y-Koordinaten zu speichern. MAX_POINTSbegrenzt die Anzahl der Datenpunkte, um Überläufe zu vermeiden.- Das Programm verwendet eine
while-Schleife, um die Koordinaten einzulesen. - Benutzer können Datenpunkte eingeben und die Eingabe beenden, indem sie
-1 -1eingeben. - 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:
- Wir verwenden die Methode der kleinsten Quadrate, um die Steigung und den Achsenabschnitt zu berechnen.
- Die Formel für die Steigung lautet: m = (n _ Σ(xy) - Σx _ Σy) / (n * Σ(x²) - (Σx)²)
- Die Formel für den y-Achsenabschnitt lautet: b = (Σy - m * Σx) / n
- Die Funktion
computeLinearRegression()berechnet diese Parameter. - 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:
- Wir haben eine
predictY()-Funktion hinzugefügt, um y für einen beliebigen gegebenen x-Wert zu berechnen. - Die Hauptfunktion gibt die vollständige Gleichung aus: y = mx + b.
- Wir demonstrieren die Vorhersage, indem wir y-Werte für verschiedene x-Eingaben anzeigen.
- 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.



