PCA是一种线性降维算法,即对原数据data乘以一个矩阵W,做线性变换。比如:
data: m * n,即m个样本,n个特征; W: n * (n/2)。则data * W: m * (n/2),便起到了降维的作用。
PCA的详细推导见:http://download.csdn.net/download/zk_j1994/9927042
1. 算法概述
1)记数据集为X,一行代表一个样本,一列代表一个特征;
2)计算X'X的特征值矩阵,特征向量矩阵;
3)取特征值矩阵中较大的特征值对应的特征向量构成的矩阵W,即为投影矩阵;
4)XW即为降维后的数据,注意此X为中心化后的X。
2. PCA的实现
2.1 加载数据,画图等工具函数
def load_data():
with open("../PCA/data/Iris.txt", "r") as f:
iris = []
for line in f.readlines():
temp = line.strip().split(",")
if temp[4] == "Iris-setosa":
temp[4] = 0
elif temp[4] == "Iris-versicolor":
temp[4] = 1
elif temp[4] == "Iris-virginica":
temp[4] = 2
else:
raise(Exception("data error."))
iris.append(temp)
iris = np.array(iris, n