2016-04-24 155 views
1

我在C#中绘制Windows应用程序中的图。 我用 Least Squares Fitting--Perpendicular Offsets 找到最合适的线。但是我的数据源从垂直线到(几乎)水平线不等。如何使用主成分分析找到最佳拟合线?

然后我阅读了关于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; 

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

回答

1

是的,PCA会从数据集中找到总平方距离最小的一条线。

PCA从计算协方差矩阵开始。当你用这个矩阵乘以任何向量时,结果的大小就是向量方向的数据集的方差。

如果通过数据的平均点绘制直线,则该直线上所有点的总平方距离为垂直于该直线的矢量的方差,因此您需要查找具有最小垂直线的直线方差。

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

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

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

+0

Thanks @Matt,请您在accord.net和c#上下文中解释我。因为这更数学。 – KSK

+0

我没有得到究竟该做什么.. – KSK

+0

啊,你没有问到究竟要做什么:)对不起,我不熟悉accord.net,所以这不是我可以回答的问题,虽然我是确定使用Accord.Statistics中的PCA类将会非常容易。 –