主成分分析(Principal Component Analysis,简称PCA)是一种常用的数据降维和特征提取技术。它通过线性变换将原始数据映射到一个新的坐标系中,使得在新的坐标系中数据的方差最大化。
在主成分分析中,我们希望找到一组正交的主成分(principal components),它们是原始数据中变化最大的方向。第一个主成分对应的是数据中的最大方差,第二个主成分对应的是与第一个主成分正交且具有次大方差的方向,依此类推。通过选择最重要的主成分,我们可以实现数据的降维,并且保留了原始数据中最具信息量的部分。
添加 maven 依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
Java 代码实现如下所示:
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.EigenDecomposition;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.stat.correlation.Covariance;
public class PCATest {
public static void main(String[] args) {
// 原始数据
double[][] data = {
{2.5, 2.4},
{0.5, 0.7},
{2.2, 2.9},
{1.9, 2.2},
{3.1, 3.0},
{2.3, 2.7},
{2.0, 1.6},
{1.0, 1.1},
{1.5, 1.6},
{1.1, 0.9}
};
/**
* 1.标准化数据:如果原始数据的各个特征具有不同的尺度或单位,需要对数据进行标准化处理,
* 使得各个特征具有相同的尺度,例如通过均值中心化和标准差缩放。
*/
// 创建实数矩阵
RealMatrix matrix = new Array2DRowRealMatrix(data);
/**
* 2.计算协方差矩阵:通过计算标准化后的数据的协方差矩阵,来描述不同特征之间的相关性
*/
Covariance covariance = new Covariance(matrix);
RealMatrix covarianceMatrix = covariance.getCovarianceMatrix();
/**
* 3.计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
* 特征向量表示了数据在新的坐标系中的方向。
*/
EigenDecomposition eigenvectorDecomposition = new EigenDecomposition(covarianceMatrix);
RealMatrix eigenvectors = eigenvectorDecomposition.getV();
/**
* 4.选择前k个主成分:按照特征值的大小排序,选择前k个特征向量作为主成分。
*/
int k = 1;
RealMatrix principalComponents = eigenvectors.getSubMatrix(0, eigenvectors.getRowDimension() - 1, 0, k - 1);
/**
* 5.数据投影:将原始数据投影到选取的主成分上,得到降维后的数据。
*/
RealMatrix transformedData = matrix.multiply(principalComponents);
// 输出结果
System.out.println("原始数据维度:" + matrix.getRowDimension() + " x " + matrix.getColumnDimension());
System.out.println("降维后数据维度:" + transformedData.getRowDimension() + " x " + transformedData.getColumnDimension());
System.out.println("降维后数据:");
for (int i = 0; i < transformedData.getRowDimension(); i++) {
System.out.println(transformedData.getEntry(i, 0));
}
}
}
执行结果如下所示:
将102维的数组降维为 101 维的数组。
总结
在态势感知中,主成分分析可以用于多种应用:
- 可视化分析:通过将数据投影到主成分上,可以将高维数据可视化为二维或三维空间。这样可以更直观地展示和探索数据的结构、聚类、分布等特征,帮助分析人员发现隐藏在数据中的重要信息和洞察。
- 数据压缩和存储:通过降维,主成分分析可以减少数据的存储空间和传输成本。压缩后的数据仍然保留了原始数据中最重要的信息,从而可以在有限资源的环境中更有效地存储和传输数据。
- 特征提取:主成分分析可以帮助识别和提取数据中最具有区分度和信息量的特征。通过选择最重要的主成分,可以捕捉数据中的主要变化模式和关键特征,从而更好地理解和描述态势。这有助于发现潜在的模式、异常和趋势。
- 数据降维:态势感知中的数据通常包含大量的特征和维度,例如传感器数据、监控数据等。通过应用主成分分析,可以将高维数据降低到较低的维度,从而减少存储和计算成本,并提高后续数据处理和分析的效率。
- 异常检测:主成分分析可以帮助检测和识别数据中的异常情况。异常数据通常在主成分分析中表现为与主要变化模式不一致的离群点,通过分析主成分得分或重构误差,可以发现和定位潜在的异常事件或异常行为。
主成分分析可以帮助我们更好地理解数据、发现潜在的模式和结构,并且简化了后续的数据分析和建模过程。