Skip to content

maximilianfeldthusen/LinearRegression

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

Documentation

LinearRegression

This C++ code demonstrates how to perform linear regression using the Dlib library. Let's break it down step by step to understand its components and functionality.

Includes and Namespaces

#include <iostream>
#include <vector>
#include <dlib/matrix.h>
#include <dlib/statistics.h>
#include <dlib/svm.h>
#include <dlib/optimization.h>

using namespace std;
using namespace dlib;
  • The code includes necessary headers from the C++ standard library (<iostream> and <vector>) and the Dlib library for matrix operations, statistics, support vector machines (SVM), and optimization functions.
  • It uses std and dlib namespaces to avoid prefixing standard and Dlib functions with their respective namespaces.

Data Structure

struct DataPoint {
    double feature1;
    double feature2;
    double label;
};
  • A simple struct DataPoint is defined to hold a single data point, consisting of two features (feature1 and feature2) and a corresponding label (label).

Loading Data

void load_data(vector<DataPoint>& data) {
    data.push_back({1.0, 2.0, 3.0});
    data.push_back({2.0, 3.0, 5.0});
    data.push_back({3.0, 4.0, 7.0});
    data.push_back({4.0, 5.0, 9.0});
    data.push_back({5.0, 6.0, 11.0});
}
  • The load_data function fills a vector<DataPoint> with predefined data points. In a real application, this data might be loaded from files or databases, but here it's hardcoded for simplicity.

Performing Linear Regression

void perform_linear_regression(const vector<DataPoint>& data) {
    matrix<double> X(data.size(), 2); // 2 features
    matrix<double> y(data.size(), 1); // 1 output

    for (size_t i = 0; i < data.size(); i++) {
        X(i, 0) = data[i].feature1;
        X(i, 1) = data[i].feature2;
        y(i, 0) = data[i].label;
    }
  • The function perform_linear_regression takes the data as input and prepares two matrices:
    • X: A matrix of size (number of data points) x (number of features), where each row corresponds to a data point and each column corresponds to a feature.
    • y: A matrix of size (number of data points) x 1, which contains the labels of the data points.
    matrix<double> weights;
    weights = pinv(X) * y;  // Pseudo-inverse method for linear regression
  • The weights (coefficients) for the linear regression model are calculated using the pseudo-inverse method (pinv(X)), which is a common technique for solving linear regression problems.
    cout << "Weights: " << trans(weights) << endl;
  • The calculated weights are printed to the console. The trans(weights) function transposes the weights matrix for better readability.
    for (const auto& point : data) {
        matrix<double> input(2, 1);
        input(0, 0) = point.feature1;
        input(1, 0) = point.feature2;

        matrix<double> prediction = trans(weights) * input; // Transpose weights for correct multiplication
        cout << "Predicted label for (" << point.feature1 << ", " << point.feature2 << ") is " << prediction(0, 0) << endl;
    }
}
  • A loop iterates through each data point, constructs an input matrix from the features, and calculates the predicted label using the formula ( \text{prediction} = \text{weights}^T \cdot \text{input} ), where weights is transposed to match the dimensions for matrix multiplication.
  • Each predicted label is printed to the console.

Main Function

int main() {
    vector<DataPoint> data;
    load_data(data);
    perform_linear_regression(data);
    return 0;
}
  • The main function initializes a vector to hold the data points, calls load_data to populate it, and then calls perform_linear_regression to compute and display the results.

Summary

This code snippet implements a basic linear regression model using Dlib for matrix operations. It loads a small dataset, computes weights for the linear model, and makes predictions based on those weights. The implementation is straightforward and serves as an introductory example of applying linear regression with matrix mathematics in C++.

About

C++ code that demonstrates how to perform linear regression using the Dlib library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages