简述
主成分分析是一种分析、简化数据集的技术,经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。
主要思路是将n维的数据投影到k(n>k)维空间超平面(直线的高维推广)上面去,使得各个样本点到超平面的投影距离最小(欧式距离)且方差最大。
算法思想
Input:n维样本集
Output:降维后的样本集
1、将原始数据集中每个样本用向量表示为矩阵,再对矩阵进行中心化处理
2、求协方差矩阵
3、求特征值和特征向量
4、求出的特征向量按特征值大小组合形成一个映射矩阵,取前n行或n列,可以用cRate用来检测
5、用映射矩阵对样本集进行映射,得到降维后的样本集
matlab代码实现
PCA函数
function [nMatrix,meanValue] = PCA(X,cRate)
% nMatrix为降维后的新矩阵,meanValue为X每列的均值,用于还原X,cRate为贡献率
% 中心化样本矩阵
meanValue = ones(size(X,1),1)*mean(X); %每列均值构成的矩阵
X = X- meanValue; % 减去均值,ones()为生成一个行数与x一致的列向量
Cov = (X'*X)/(size(X,1)-1); % 协方差矩阵
[Vector,Value]= eig(Cov); % 计算特征向量和特征值
[B,order] = sort(diag(-Value)); % order记录下排序后的索引值,B为排序后得到的列向量
Vector = Vector(:,order); %将特征向量降序排列
Val = diag(Value); % 构成一个列向量
sumValue = sum(Val); %求出特征值之和
for i=1:length(Val)
Rat = sum(1:i,1)/sumValue; %选取其中n个特征向量
if Rat < cRate
cols = i;
break;
end
end
Trans = Vector(:,1:cols);
nMatrix = X*Trans;
end
main主函数
% 将降维后得到的新矩阵newX恢复:公式为X=nMatrix*T'+meanValue
clc;
close all;
A = load('testSet.txt');
[nMat,mVal] = PCA(A,0.95) %
python代码实现
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet(fileName, delim=&