2016-04-24 17 views
1

私はグラフをWindowsアプリケーションでC#でプロットしています。 私はこれまでに 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

はい、PCAはデータセットとの総自乗距離が最小の直線を見つけます。

PCAは共分散行列の計算から始まります。ベクトルにこの行列を乗算すると、結果の大きさはベクトルの方向のデータセットの分散になります。

データの平均点を通って線を描くと、その線からのすべての点の合計二乗距離は、その線に垂直なベクトルに沿った分散です。したがって、最小の垂線を持つ線分散。

共分散行列は対称です。視覚的には、2つの直交する固有ベクトルがあり、軸をこれらの固有ベクトルに移動すると、それは単純な対角行列になります。

共分散行列の主な固有ベクトルは、データの最大分散の方向であり、他の固有ベクトルは最小分散の方向です。固有ベクトルは垂直であり、ベストフィット線は最小分散の方向に垂直であるので...

PCAが検出する共分散行列の主な固有ベクトルは、最適な線の方向です。平均点を通ってその方向に線を引くと、完了です。

+0

ありがとう@Matt、accord.netとc#の文脈で私を説明してください。これはより数学的です。 – KSK

+0

私は正確に何をするのかわからない。 – KSK

+0

ああ、あなたは正確に何をするのか尋ねなかった:)申し訳ありませんが、私はaccord.netに精通していないので、私は答えることができます。 Accord.StatisticsのPCAクラスを使用すると非常に簡単になるでしょう。 –

関連する問題