如何使用主成分分析找到最佳拟合线?

时间:2016-04-24 12:47:20

标签: c# accord.net best-fit

我在C#中使用Windows应用程序绘制图形。 我已经习惯了 Least Squares Fitting--Perpendicular Offsets 找到最合适的线。但我的数据源从垂直线到(几乎)水平线不等。

然后我读了关于PCA和Accord.net库的内容。我已经编写了一些代码,但没有得到进一步的确切内容。

我有一个图表的DataPoints列表。

DataTable dt = new DataTable();
dt.Columns.Add("X", typeof(double));
dt.Columns.Add("Y", typeof(double));

foreach (DataPoint dp in listOfPoints)
{
    DataRow dr = dt.NewRow();
    dr["X"] = dp.XValue; 
    dr["Y"] = dp.YValues[0];
    dt.Rows.Add(dr);
}

string[] columnNames;
double[,] sourceMatrix = dt.ToMatrix(out columnNames);
DescriptiveAnalysis sda = new DescriptiveAnalysis(sourceMatrix, columnNames);
sda.Compute();
AnalysisMethod method = AnalysisMethod.Center;

PrincipalComponentAnalysis pca = new PrincipalComponentAnalysis(sda.Source, method);
pca.Compute();
double[] mean = sourceMatrix.Mean();
double[,] eigenVectors = pca.ComponentMatrix;

获得特征向量之后如何利用它们绘制最佳拟合线。

1 个答案:

答案 0 :(得分:2)

是的,PCA会找到距离数据集最小的总平方距离的行。

PCA从计算协方差矩阵开始。当您将任何向量乘以此矩阵时,结果的大小就是数据集在向量方向上的方差。

如果通过数据的平均点绘制直线,则该直线上所有点的总平方距离是沿垂直于该直线的矢量的方差,因此您希望找到垂直方差最小的直线

协方差矩阵是对称的。这在视觉上意味着它有两个正交的特征向量,如果你将轴移动到这些特征向量,那么它就变成了一个简单的对角矩阵。

协方差矩阵的主特征向量是数据中最大方差的方向,而另一个特征向量是最小方差的方向。由于特征向量是垂直的,最佳拟合线垂直于最小方差的方向......

协方差矩阵的主要特征向量,即PCA找到的,是最佳拟合线的方向。在该方向上绘制一条直线,然后就完成了。