参考链接: 使用Python进行主成分分析PCA

理解PCA:what? why? how?

当我们拿到一个数据集的时候,往往数据集中每一个样本的描述是多维的,多维的特征空间不便于我们或者计算机对其进行分析和处理,所以我们希望用低维度的特征向量来表述样本的特征,此时我们需要对其进行降维

假设矩阵 X 在多维空间中有 n 个样本点:

我们希望它们投影到一个方向 u 上,使得投影范围最大,这个方向称为主方向(主成分PCA),可以用方差度量一个随机变量离散程度,即可用方差度量样本点在一个方向上投影之后得离散程度

样本 X(150x4) 投影到 u(4x1) 方向上,即 X•u,得到一个一维的向量 Z(150x1)  对 Z 求方差,而使得方差最大的那个 u 就是主方向,所以我们需要对z = X•u求方差,并且求方差的极值

一、求方差:

对 X 进行中心化:  中心化后的方差为:  线性代数表示方差 [ z12 + z22 + z32 + … + zn2 ] = zT•z,而 z = X•u

二、拉格朗日乘子法求 zT•z 极值(方差最大值)

u 是单位向量,约束条件为:uT•u = 1, 即 uT•u - 1 = 0  由于 (XT•A•X)’ = 2•A•X , 则L(u, λ) 对 u 求偏导得:  XT 是4x150矩阵,X 是150x4的矩阵,点乘得到4x4的协方差矩阵 XT•X,对 XT•X 求得特征值 λ 和特征向量 u  而最大特征值 λ 所对应的 u 就是主方向!

PCA就是样本投影之后方差最大的方向即主方向 次方向就是垂直于主方向的剩下的最大的 λ 所对应的 u … (特征向量 u 中的所有方向互相垂直)

前k个主方向的选取:

有时候降到一维(只选取一个主方向)并不是最优,所以我们可以选取 k 个主方向 对λ和u排序,计算 (λ1+λ2+λ3+λ4)x85% 得到一个值 w 如果发现前k个λ的和大于 w 就选取对应k个u作为前k个主向量 (85%只是一个可接受的能量比例) 反过来选取k个主方向,算出掌握多大能量和损失多大能量

python实现代码

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

# 对矩阵进行中心化

def centralization(mat):

for j in range(mat.shape[1]):

m = np.mean(mat[:, j:j+1])

for i in range(mat.shape[0]):

mat[i][j] -= m

return mat

# 对特征值和对应的特征向量进行排序(选择排序算法)

def v_sort(egv, ftv):

for i in range(egv.__len__()):

for j in range(i+1, egv.__len__()):

if egv[j]>egv[i]:

tmp1 = egv[i]

egv[i] = egv[j]

egv[j] = tmp1

tmp2 = ftv[i]

ftv[i] = ftv[j]

ftv[j] = tmp2

return egv, ftv

# 降维

def PCA(mat, k, ctl=0):

if ctl==1:

# 对样本数据进行中心化

mat = centralization(mat)

# 求协方差矩阵

cov_mat = np.dot(mat.T, mat)

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

egv, ftv = np.linalg.eig(cov_mat)

# 对特征值排序,同时对相应特征向量改变

egv, ftv = v_sort(egv, ftv)

# 取前 k 个主方向

headv = ftv[:k]

# 把多维特征投影到主方向上

x = np.zeros((k, mat.shape[0]))

for i in range(k):

x[i] = np.dot(mat, headv[i])

return x

if __name__=="__main__":

# 从 Advertising.csv 读取数据

data = pd.read_csv("../../Dataset/Advertising.csv").drop('Unnamed: 0', axis=1)

# 将DataFrame型数据转化成矩阵

mat = data.as_matrix(columns=None)[:, :-1]

# PCA降维

x = PCA(mat, 2, ctl=1)

# 图形显示

x1 = data['TV']

x2 = data['radio']

x3 = data['newspaper']

y = data['sales']

fig = plt.figure('三维特征')

ax = Axes3D(fig)

ax.scatter(x1, x2, x3)

fig = plt.figure('二维特征')

plt.plot(x[0], x[1], 'yo')

plt.title('PCA')

plt.show()

从三维降到二维效果显示:

[转载] 机器学习之主成分分析PCA(Python实现)相关推荐

  1. 主成分分析(PCA)Python代码实现

    主成分分析(Principal Components Analysis, PCA)简介可以参考: http://blog.csdn.net/fengbingchun/article/details/7 ...

  2. 主成分分析(PCA)-Python代码

    主成分分析是利用降维的思想,在损失很少信息的前提下把多个指标转化为几个综合指标的多元统计方法. 算法的具体步骤如下: 1)对向量X进行去中心化. 2)计算向量X的协方差矩阵,自由度可以选择0或者1. ...

  3. 吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现)

    吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现) Introduction 在本实验中,将实现K-means聚类算法,并将其应用于图像压缩.在第二部分实验中,将使用主成分 ...

  4. [转载] Python 主成分分析PCA

    参考链接: Python 主成分分析(PCA) 原文请参考:http://www.cnblogs.com/chenbjin/p/4200790.html点击打开链接 主成分分析(PCA)是一种基于变量 ...

  5. [转载]简单易学的机器学习算法-主成分分析(PCA)

    一.数据降维 对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作.降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低.降维的操作可以理解为一种映射关系,例如函数 ,即由原来的 ...

  6. Python机器学习13——主成分分析

    本系列所有的代码和数据都可以从陈强老师的个人主页上下载:Python数据程序 参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021. 本系列基本不讲数学原理,只从代码角度去让 ...

  7. 机器学习系列笔记六:主成分分析PCA[下]

    机器学习系列笔记六:主成分分析PCA[下] 文章目录 机器学习系列笔记六:主成分分析PCA[下] scikit-learn中的PCA 基本使用 进阶操作 对比实验 设置合理的n_components ...

  8. 机器学习-Sklearn(第三版)Day4 主成分分析PCA与奇异值分解SVD

    目录 一.简介 什么是维度 sklearn中的降维算法 二.PCA与SVD 0.如何实现降维算法 思考:PCA和特征选择技术都是特征工程的一部分,它们有什么不同? 1.重要参数n_components ...

  9. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)

    Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...

最新文章

  1. 计算机应用综合实践实验心得,综合实践活动培训心得体会范文(精选5篇)
  2. 《Essential C++》笔记之设定头文件
  3. js控制数量包含截取
  4. mysql cluster常见问题访问_MySQL Cluster的常见问题
  5. M1 Max 暴击,倚天补刀
  6. Java基础:Collection集合、Iterator迭代器以及泛型
  7. 《Arduino开发实战指南:机器人卷》一1.3 安装Arduino Uno驱动
  8. springboot 2中文手册_基于spring boot的JAVA开源商城系统实战,后台管理系统免费分享...
  9. 【各学校通用】5分钟刷完天津科技大学雨课堂视频
  10. 上班工作压力太大?来玩个游戏解压下
  11. adobe bridge cs6怎么卸载_卸载after effects cs6卸载不掉 怎么办
  12. java中加号_java中四则运算中的加号
  13. 明月当空照,python3D编程初阶:坐标、模型、纹理与光
  14. 为什么外包公司这么不受欢迎??
  15. wav文件隐写:Deepsound+TIFF图片PS处理( AntCTF x D^3CTF 2022 misc BadW3ter)
  16. RxSwift+Moya之项目实战
  17. 绚丽的魔兽世界,广袤的艾泽拉斯大陆
  18. 怎么防止过曝_在拍摄的时候,要如何避免闪光灯过曝?
  19. 阿里云学生成长计划资格考试分享
  20. 电磁场与仿真软件(36)

热门文章

  1. 【编辑器】VSCode+PHPstudy环境配置,PHP简易开发环境搭建
  2. 洛谷P3369 【模板】普通平衡树(STL做法:vectormultiset)
  3. 小学用计算机画画的课件,用计算机画图画.ppt
  4. php 和new date,将JavaScript new Date()转换为php DateTime()
  5. java 实现打印条形码_激光打印机与条码打印机打印不干胶标签哪个好?
  6. 列表转化成数组_30. 把数组排成最小的数
  7. 索佳电子水准数据传输软件_索佳全站仪数据传输软件
  8. 和为s的两个数字 - 双指针
  9. activiti 设置候选人_中标 | 河南移动公示无源波分复用设备集采中标候选人名单:3家厂商上榜...
  10. HTTP协议—状态码(思维导图速查)