user3636322
user3636322

Reputation: 55

least square line fitting in 4D space

I have a set of points like:

(x , y , z , t)

(1 , 3 , 6 , 0.5)

(1.5 , 4 , 6.5 , 1)

(3.5 , 7 , 8 , 1.5)

(4 , 7.25 , 9 , 2)

I am looking to find the best linear fit on these points, let say a function like: f(t) = a * x +b * y +c * z

Upvotes: 2

Views: 2237

Answers (3)

Augusto César
Augusto César

Reputation: 106

You have a linear problem.

For example, my equation will be Y=ax1+bx2+c*x3.

In MATLAB do it:

B = [x1(:) x2(:) x3(:)] \ Y;
Y_fit = [x1(:) x2(:) x3(:)] * B;

In PYTHON do it:

import numpy as np
B, _, _, _ = np.linalg.lstsq([x1[:], x2[:], x3[:]], Y)
Y_fit = np.matmul([x1[:] x2[:] x3[:]], B)

Upvotes: 1

user1196549
user1196549

Reputation:

It seems that you are looking for the major axis of a point cloud.

You can work this out by finding the Eigenvector associated to the largest Eigenvalue of the covariance matrix. Could be an opportunity to use the power method (starting the iterations with the point farthest from the centroid, for example).

Can also be addressed by Singular Value Decomposition, preferably using methods that compute the largest values only.

If your data set contains outliers, then RANSAC could be a better choice: take two points at random and compute the sum of distances to the line they define. Repeat a number of times and keep the best fit.

Using the squared distances will answer your request for least-squares, but non-squared distances will be more robust.

Upvotes: 3

amit
amit

Reputation: 178531

This is Linear Regression problem. The "best fit" depends on the metric you define for being better.

One simple example is the Least Squares Metric, which aims to minimize the sum of squares: (f((x_i,y_i,z_i)) - w_i)^2 - where w_i is the measured value for the sample.

So, in least squares you are trying to minimize SUM{(a*x_i+b*y_i+c*z^i - w_i)^2 | per each i }. This function has a single global minimum at:

(a,b,c) = (X^T * X)^-1 * X^T * w

Where:
X is a 3xm matrix (m is the number of samples you have)
X^T - is the transposed of this matrix
w - is the measured results: `(w_1,w_2,...,w_m)`
The * operator represents matrix multiplication 

There are more complex other methods, that use other distance metric, one example is the famous SVR with a linear kernel.

Upvotes: 4

Related Questions