1

我在 C# 的 Windows 应用程序中绘制图表。我使用 最小二乘拟合——垂直偏移 来找到最佳拟合线。但是我的数据源从垂直线到(几乎)水平线不等。

然后我阅读了有关 PCA 和 Accord.net 库的信息。我已经写了一些代码,但没有得到进一步做的事情。

我有一个图表的数据点列表。

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;

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

4

1 回答 1

2

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

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

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

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

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

PCA 找到的协方差矩阵的主特征向量是最佳拟合线的方向。 通过平均点在那个方向上画一条线,你就完成了。

于 2016-04-24T13:09:45.070 回答