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