PCA
PCA(principal components analysis)即主成分分析技术,又称主分量分析。主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。
1.优缺点:
适用数据范围:数值型。
优点:降低数据的复杂性,识别最重要的多个特征。
缺点:不一定需要,而且可能损失有用的信息
2.核心思想:
在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。
3.大致流程:
去除平均值
计算协方差矩阵
计算协方差矩阵的特征值和特征向量
特征值从大到小排序
保留最上面的N个特征向量
将数据转换到N个特征向量构建的新空间
4.简单查看数据集:
多个坐标点:
5.核心代码:
PCA.py:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32import numpy as np
# 加载数据
def loadDataSet(filename, delim='\t'):
fr = open(filename)
strArr = [line.strip().split(delim) for line in fr.readlines()]
data = [list(map(float, line)) for line in strArr]
return np.mat(data)
# 主成分分析
def pca(data, topN=9999999):
# 求出数据集每个特征平均值
meanVals = np.mean(data, axis=0)
# 去平均值
meanRemoved = data - meanVals
# 计算协方差矩阵,按列运算
covMatrix = np.cov(meanRemoved, rowvar=False)
# 计算出协方差矩阵的特征值和每个特征值对应的特征向量
featureVals, featureVectors = np.linalg.eig(np.mat(covMatrix))
# 拿到特征值由小到大的下标
sortedIndex = np.argsort(featureVals)
# 从后往前拿到前N个最大特征值的下标
maxNValsIndex = sortedIndex[:-(topN + 1):-1]
# 利用这些下标拿出对应的特征向量并组成压缩矩阵
maxVectors = featureVectors[:, maxNValsIndex]
# 计算出将维度降为N,压缩后的矩阵
lowDataMatrix = meanRemoved * maxVectors
# 利用降维后的矩阵重构原矩阵(用来调试)
reconstruct = (lowDataMatrix * maxVectors.T) + meanVals
return lowDataMatrix, reconstruct
6.简单测试并查看:
1 | data = PCA.loadDataSet("../../resource/pca/testSet.txt") |
可视化: