PCA with linear Accord.Net
Implements principal component analysis(PCA) algorithm
PCA Summary
์ฃผ์ฑ๋ถ ๋ถ์์ ์ฐจ์ ์ถ์๋ฅผ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ์ด์์.
์์๋ก ์ค๋ช ํ๋ฉด x,y,z ์ 3์ฐจ์ ์ขํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฆฌ์คํธ๊ฐ ์๋ค๊ณ ํ ๋, ์ด๋ฅผ ๋ถ์ํด์ ๊ฒฝํฅ์ฑ์ ์์นํํด 2์ฐจ์ ์ขํ๋ก ๋ํ๋ด๊ฒ๋ ํ๋ ๊ธฐ๋ฒ์ด์์.
์ค์ ๊ตฌํ ์์ ์ฝ๋๋ ์๋์ ๊ฐ์์.
Example
public static List<double> GetPCADataErrorValue(List<double[]> coordinates)
{
var originalData = coordinates.DeepClone();
var data = coordinates.ToArray();
var centroid = Measures.Mean(data, dimension: 0);
PrincipalComponentAnalysis pca = new PrincipalComponentAnalysis()
{
Method = PrincipalComponentMethod.CovarianceMatrix,
Means = centroid,
};
var adjustData = AdjustData(data, centroid);
var covariance = Measures.Covariance(adjustData);
pca.Learn(covariance);
var transform = pca.Transform(originalData.ToArray());
double maxDistance = 0;
List<double> distanceList = new List<double>();
// ๊ฐ ์ ์์ ์ฃผ์ด์ง ์ ์ ๋ํ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
for (int i = 0; i < data.Length; ++i)
{
var distance = Math.Sqrt(Math.Pow(transform[i][1], 2) + Math.Pow(transform[i][2],2));
distanceList.Add(distance);
maxDistance = Math.Max(maxDistance, distance);
}
}
private static double[][] AdjustData(double[][] data, double[] centroid)
{
for (int i = 0; i < data.Length; i++)
for (int j = 0; j < data[i].Length; j++)
data[i][j] -= centroid[j];
return data;
}
Last updated