PCA算法讨论

题目PCA算法讨论

1.1 题目的主要研究内容

  1. 算法的原理介绍
  2. 算法的试验
  3. 算法的实例展示
  4. 算法上机演示

1.2 题目研究的工作基础或实验条件

(1)硬件环境(电脑)

(2)软件环境(python 语言,MATLAB语言)

1.3 设计思想

PCA(主成分分析)是十大经典机器学习算法之一。PCA是Pearson在1901年提出的,后来由Hotelling在1933年加以发展提出的一种多变量的统计方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。简而言之,PCA就是压缩数据,降低维度,把重要的特征留下来。最终达到数据可视化的目的。

  1. 将原始数据按列组成m行n列矩阵X
  2. 将X的每一列进行零均值
  3. 求出协方差公式
  4. 求出协方差矩阵的特征值和特征向量
  5. 将特征向量按照特征值大小从左到右排列成矩阵P
  6. Y=XP即为降维的数据

1.4 流程图

1.5 主要程序代码(要求必须有注释)

(1)python程序演示

import numpy as np

import matplotlib.pyplot as plt

#数据表示

x = np.array([1,1,2,4,2])

y = np.array([1,3,3,4,4])

x1 = x

y1 = y

data = np.matrix([ [x1[i],y1[i]] for i in range(len(x1)) ])  #将数据转化为矩阵形式

print("输出矩阵", data)

mean_x = np.mean(x)    #求均值

mean_y = np.mean(y)

print("第一列均值", mean_x)

print("第二列均值", mean_y)

x1 = x - mean_x

y1 = y - mean_y

data = np.matrix([ [x1[i],y1[i]] for i in range(len(x1)) ]) #将数据转化为矩阵形式

print("求均值之后的数据", data)

#求协方差矩阵(Covariance Matrix)

cov1 = np.cov(x1,y1)

print("协方差矩阵", cov1)

#求协方差矩阵的特征值和特征向量

#用numpy自带的函数计算特征根和特征向量

val,vec = np.linalg.eig(cov1)

print("特征值", val)

print("特征向量", vec)

#原数据 X 特征向量 = 降维后的数据

main_pair = [(np.abs(val[i]) ,vec[:,i]) for i in range(len(val))]

feature = main_pair[0][1]

new_data_reduced = np.transpose(np.dot(feature,np.transpose(data)))

print("降维之后的结果", new_data_reduced)

(2)MATLAB程序演示

clc;

clear all;

close all; % 清理工作空间

clear;

data = [1,1 %矩阵数据

1,3

2,3

4,4

2,4]

fprintf(1,'均值为\n ')

mapping.mean = mean(data, 1) %计算均值

fprintf(1,'去均值为\n ')

data = data - repmat(mapping.mean, [size(data, 1) 1])%去均值

fprintf(1,'协方差为\n ')

C = cov(data) %协方差矩阵

fprintf(1,'C矩阵特征向量及特征值为\n ')

[M, lambda] = eig(C)%求C矩阵特征向量及特征值

[lambda, ind] = sort(diag(lambda), 'descend'); %排序

lambda=lambda./sum(lambda);

lambda=cumsum(lambda);

k=find(lambda>0.85) ;%选出贡献率达到85的指标前K个

M = M(:,ind(1:k(1)-1));%%取前k列

mappedX = data * M %降维后的X

1.6 运行结果及分析

  1. python结果演示

  1. MATLAB结果演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李逍遥敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值