主成分分析(PCA)算法

1.PCA简介:
PCA(Principal Component Analysis),主成分分析,是一种常用的数据降维算法。数据降维是指对高维度特征数据进行处理,保留重要的特征,去除噪声和不必要的特征,以达到提升 数据处理速度的目的。
PCA的主要思想是将原有数据的n维特征映射到k维上(k<n),这k维是全新的正交特征,也被称作主成分。PCA的工作是从原空间中找出一组相互正交的新坐标轴。新坐标轴的选择按照方差最大来进行选择。第一个坐标轴为原始数据中方差最大的方向,第二个坐标轴为与第一个坐标轴平面正交的方差最大的方向,第三个坐标轴为与一、二两个坐标轴平面正交的方差最大的方向,以此类推。可以发现,方差最大的基本包含在前k个坐标轴中,后面的基本方差为0,故我们保留前k个特征维度,以实现数据的降维。

2.方差、协方差、协方差矩阵

样本方差:

每个样本值与全体样本值的平均数之差的平方值的平均数,代表着样本数据的偏离程度。

样本X和样本Y的协方差:

协方差是用于衡量两个变量的总体误差。如果两个变量的变化趋势一致,如X大于自身期望值,Y也大于自身期望值,说明X和Y是正相关关系,则协方差大于0,反之,X和Y是负相关关系,协方差小于0。若协方差等于0,则说明X和Y相互独立。,方差是协方差的特殊情况,Cov(X,X)就是X的方差。
方差和协方差的除数是n-1,是为了得到方差和协方差的无偏估计。

协方差矩阵:
当样本为n维数据时,它的协方差实际就位协方差矩阵(对称方阵)。例如对于三维数据(X,Y,Z),它的协方差就是:

3.PCA算法的两种实现方法:
(1)基于特征值分解协方差矩阵实现PCA算法
输入:数据集X(n维),需要降到k维
1.原始数据进行标准化,均值为0,方差为1
2.计算协方差矩阵Cov
3.计算协方差矩阵的特征值和对应的特征向量
4.对特征值按大小进行排序,选择其中最大的k个。然后将其对应的特征向量分别作为行向量组成特征向量矩阵P
5.将数据转换到由k个特征向量构成的新空间中,即Y=PX
(2)基于SVD分解协方差矩阵实现PCA算法
输入:数据集X(n维),需要降到k维
1.去平均值,每一位特征减去自己的平均值
2.计算协方差矩阵Cov
3.通过SVD(奇异值分解)计算协方差矩阵的特征值和对应的特征向量
4.对特征值按大小进行排序,选择其中最大的k个。然后将其对应的特征向量分别作为列向量组成特征向量矩阵P
5.将数据转换到由k个特征向量构成的新空间中,即Y=PX

4.最大方差理论与最小平方误差理论
对于二维样本点,我们的目标是是求一条直线,并且尽可能使这条直线尽可能更好。
(1)最大方差理论
在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。因此我们认为,最好的k维特征是将n维样本点变换为k维后,每一维上的样本方差都尽可能的大,也就是让数据在主轴上投影的方差最大(在我们假设中方差最大的有用信号最大化减少了噪声的影响)。
(2)最小平方误差理论
我们可以使用点到直线的距离d′来度量直线的好坏。
现在有m个样本点x(1),…,x(m),每个样本点为n维。将样本点x(i)在直线上的投影记为x(1)′,那么我们就是要最小化

这个公式称作最小平方误差(Least Squared Error),这样的话使点都尽可能聚集在新的坐标轴周围。

5.PCA算法实现iris数据集降维实例:

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_digits
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
import numpy as np
import matplotlib.pyplot as pltiris = load_iris()
x_data = iris.data
y_data = iris.targetdef zeroMean(dataMat):meanVal = np.mean(dataMat, axis= 0)newData = dataMat - meanValreturn newData, meanValdef PCA(dataMat, top):#数据中心化newData, meanVal = zeroMean(dataMat)#cov用于求协方差矩阵,参数rowvar = 0说明数据一行代表一个样本covMat = np.cov(newData, rowvar=0)#np.linalg.eig用于求矩阵的特征值和特征向量eigVals, eigVects = np.linalg.eig(np.mat(covMat))#对特征值从小到大排列eigValIndice = np.argsort(eigVals)#得到最大的n个特征值的下标n_eigValIndice = eigValIndice[-1:-(top + 1): -1]#得到下标对应的特征向量n_eigVects = eigVects[:, n_eigValIndice]#低维特征空间的数据lowDDataMat = newData * n_eigVects# print(newData)print(n_eigVects)# print(lowDDataMat)#利用低维度数据来重构数据reconMat = (lowDDataMat * n_eigVects.T) + meanValreturn lowDDataMat, reconMat#将数据降至2维
lowDDataMat, reconMat = PCA(x_data, 2)x = np.array(lowDDataMat)[:, 0]
y = np.array(lowDDataMat)[:, 1]
plt.scatter(x, y, c = y_data)
plt.show()

降维后并可视化的结果为:

主成分分析(PCA)算法实现iris数据集降维相关推荐

  1. 机器学习--主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?

    原文链接:主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是"投影"?_天下对手教会少林武僧-CSDN博客_pca投影矩阵 这是从网上看到的PCA算 ...

  2. 主成分分析|PCA算法大全

    主成分分析|PCA算法大全 文章目录 主成分分析|PCA算法大全 1. PCA原理 1.1 最大方差理论 1.2 最小平方误差理论 1.3 高维数据下的特征值分解 2. CCIPCA增量主元分析算法[ ...

  3. KNN算法预测iris数据集

    KNN算法预测iris数据集 1.数据集介绍 鸢尾花灰Iris数据集中有150个样本,每个样本有4个特征,1个标签.其中,鸢尾花种类可取0.1.2,分别代表山鸢尾setosa.变色鸢尾versicol ...

  4. 机器学习-降维之主成分分析PCA算法原理及实战

    主成分分析 前言 近年来,随着互联网和信息行业的发展,数据已经渗透到各行各业,成为重要的生产因素如数据记录和属性规模的急剧增长.社会已经进入大数据时代,数据越多越好似乎已经成为公理.然而,数据量并不是 ...

  5. 数据集特征提取_基于PCA算法实现鸢尾花数据集的特征提取任务

    PCA算法的必要性 多变量大数据集无疑会为研究和应用提供丰富的信息,但是许多变量之间可能存在相关性,从而增加了问题分析的复杂性.如果分别对每个指标进行分析,分析往往是孤立的,不能完全利用数据中的信息, ...

  6. 主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?

    这是从网上看到的PCA算法的步骤: 第一步,分别求每列的平均值,然后对于所有的样例,都减去对应的均值. 第二步,求特征协方差矩阵. 第三步,求协方差的特征值-显示全部 关注者 1,218 被浏览 78 ...

  7. 用通俗易懂的方式讲解:主成分分析(PCA)算法及案例(Python 代码)

    文章目录 知识汇总 加入方式 一.引入问题 二.数据降维 三.PCA基本数学原理 3.1 内积与投影 3.2 基 3.3 基变换的矩阵表示 3.4 协方差矩阵及优化目标 3.5 方差 3.6 协方差 ...

  8. 图解主成分分析PCA算法(附Python实现)

    0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用."深"在详细推导算法模型背后的数学原理:"广"在分析多个机器学习模型:决策树.支持 ...

  9. 从零开始实现主成分分析(PCA)算法

    声明:版权所有,转载请联系作者并注明出处: http://blog.csdn.net/u013719780?viewmode=contents 知乎专栏: https://www.zhihu.com/ ...

  10. 自组织神经网络SOM算法对Iris数据集进行聚类的matlab实现

    SOM算法原理 SOM算法是一种将高维数据通过两层神经网络(输入层和竞争层)映射至用户定义的拓扑结构中,一般常用2D矩阵拓扑结构.下图是对SOM的形象展示: 所以算法一般分为以下几步: 第一:用户自定 ...

最新文章

  1. nUnit,凑合着测试
  2. hdu 1560 DNA sequence(迭代加深搜索)
  3. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第三章——自编解析与答案
  4. linux下的精确wait
  5. 如何在Mac上安装win10正版系统
  6. java getrealpath_JavaEE路径陷阱之getRealPath
  7. 一年中最后一个月的最后一天说说_一年的最后一天说说
  8. 美国发布35页科技趋势报告!
  9. nginx配置一个简单的php网站遇到的问题
  10. 初步学习Django-第八篇:ORM常用操作
  11. 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解
  12. 解决输出顺时针螺旋数组问题【寻路算法】
  13. 软件工程结对编程博客
  14. blackfriday markdown的自动换行 go lang 正则替换字符串时遇到的坑,转义解析其中的 $1 $name 等
  15. DDWRT如何开启samba共享
  16. Web开发之Session
  17. crnn pytorch 训练、测试
  18. 自适应机器人:定义工业机械臂的未来
  19. matlab函数之saveas 和imwrite
  20. python实现规则引擎_几种开源规则引擎(BRE)的比较 转

热门文章

  1. 命令行调用SQL查询分析器
  2. cad2004教程_天正2014软件安装教程及下载地址
  3. 实战 Firefox 扩展开发
  4. java p2p实例_java文件p2p传输
  5. Ubuntu安装Monaco字体
  6. 网络工程师考试-计算机网络笔记
  7. 计算机开机提示非正版操作系统,电脑启动时显示找不到操作系统怎么办
  8. 9WinMap 映射
  9. LCD(六)显示控制器、framebuffer驱动、s3c-fb.c中probe函数分析
  10. 伊顿UPS电源说明书-伊顿UPS电源使用手册