我正在用 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;
获得特征向量后,如何利用它们绘制最佳拟合线。
是的,PCA 将找到与数据集总平方距离最小的线。
PCA 从计算协方差矩阵开始。 将任何向量乘以此矩阵时,结果的大小是数据集在向量方向上的方差。
如果通过数据的平均点绘制一条线,则与该线的所有点的总平方距离是沿垂直于该线的矢量的方差,因此您希望找到垂直方差最小的线。
协方差矩阵是对称的。 这在视觉上意味着它有两个正交特征向量,如果你将轴移动到这些特征向量,那么它就变成了一个简单的对角矩阵。
协方差矩阵的主特征向量是数据中最大方差的方向,另一个特征向量是最小方差的方向。 由于特征向量是垂直的,并且最佳拟合线垂直于最小方差的方向...
PCA 发现的协方差矩阵的主特征向量是最佳拟合线的方向。 在平均点上朝那个方向画一条线,你就完成了。