第10章 PCA降维技术

这篇具有很好参考价值的文章主要介绍了第10章 PCA降维技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 文章来源地址https://www.toymoban.com/news/detail-494327.html

 

序言

1. 内容介绍

本章详细介绍了PCA 主成分分析算法基本原理、python 实现PCA 算法方法以及sklearn实现方法等内容。

2. 理论目标

  • 了解PCA 主成分分析算法基本原理
  • 了解python 实现PCA 算法方法以及sklearn实现方法

3. 实践目标

  • 掌握PCA 算法实现方法,能完成python 实现PCA算法过程
  • 掌握sklearn 库的PCA 方法,能完成目标数据集的降维任务

4. 实践案例

5. 内容目录

  • 1.PCA降维概述

  • 2.PCA降维的思想及流程

  • 3.PCA降维案例讲解


第1节 PCA降维概述

1. 降维概述

降维是对数据高维度特征的一种预处理方法。

降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。

在实际的生产和应用中,降维在一定的信息损失范围内,可以节省大量的时间和成本。

第10章 PCA降维技术

  1. 假设三维空间中有一系列点,可用自然坐标系xyz来表示这组数据。
  2. 若这些点都分布在一个过原点的斜面上,可以尝试把xyz坐标系旋转一下,使数据所在平面与xy平面重合。
  3. 如果把旋转后的坐标系记为x’,y’,z’,那么这组数据的表示只用x’和y’两个维度表示即可!

以上过程将点 a(x1,y1,z1),转变为以 a(x2,y2) 表示,这样就把数据维度降下来了!

2. 降维目的

数据降维的主要目的有以下几点:

  1. 使数据集更容易使用。
  2. 确保变量是相互独立的。
  3. 降低很多算法的计算开销。
  4. 去除噪音。
  5. 使得结果易懂。

3. 降维方法

常见的降维技术主要有:

  1. PCA(Principal Components Analysis,主成分分析)。就是找出一个最主要的特征,然后进行分析。例如:考察一个人的智力情况,从数学、语文、英语成绩中,直接看数学成绩就行。

  2. FA(Factor Analysis,因子分析)。是指将多个实测变量转换为少数几个综合指标,通过将相关性高的变量聚在一起,从而减少需要分析的变量数量,以减少问题分析的复杂性。例如:考察一个人的学习效果,看3 科(数学、语文、英语)平均成绩即可。

  3. ICA(Independ Component Analysis,独立成分分析)。ICA认为,如果观察测到的信号是若干个独立信号的线性组合,ICA可对其进行解混。例如:KTV里面,辨别原唱和主唱。

4. PCA概述

PCA基本定义

PCA(Principal Components Analysis,主成分分析),作为一种降维技术,使数据更易用于分析数据集建立数据模型。

PCA方法主要是通过对变量协方差矩阵进行特征分解,以得到数据的主成分(即特征向量)与相应的权重值(即特征值

回顾下特征值和特征向量的定义如下:

Ax = \lambda xAx=λx

即对于矩阵AA,存在向量 xx 和 \lambdaλ 使得上式成立。

数据区分度

若将下图分别投影到横坐标:图1的数据分布最广,图2稍小,图3最小。

数据分布越广、离散度越大,代表数据在所投影的维度上具有越高的区分度,这个区分度就是信息量。

一般来说,数据的离散度可用方差来形容,即可认为数据方差越大,区分度越高,所蕴含的信息量越大。

第10章 PCA降维技术

坐标系转换

针对图3,通过旋转坐标系(即图3-1红色坐标轴即旋转后坐标系),发现图3在新坐标的纵向分布达到了最广,即区分度最高、方差最大。

第10章 PCA降维技术

PCA的主要任务就是通过寻找最优坐标系,使得原数据的在各个坐标轴上区分度最高。此处有两个核心的值分别是特征向量 和 特征值

  • 特征向量,决定了最优坐标系旋转后的方向
  • 特征值,决定了图形拉伸的比例(某一特征值除以所有特征值之和称为方差贡献率,代表了该维度下蕴含的信息量的比例)

5. PCA应用场景

PCA 主要目的是用于降维,即原数据通过矩阵的线性变换,在尽可能保留原数据信息的前提下,减少数据的维度(即属性字段的数量)。可考虑应用于以下场景:

  1. 汽车样本数据,同时具有两个字段:最大速度属性(“千米/小时”)、最大速度属性(“公里/小时”),显然两个字段基本一致。

  2. 学生成绩数据,具备以下字段:学习兴趣度、复习时间、考试成绩,三项属性存在明显的强相关。

  3. 二手房数据,二手房样本数据较少(可能只收集到10个房子数据),但是属性字段较多(大小、位置、朝向、是否学区房、建造年代、是否二手、层数、所在层数),明显不符模型数据要求。

  4. 文本数据,相同含义的词组(study 和 learn),但是计算机系统会认为是两个相互独立的词组。


第2节 PCA降维的思想及流程

1. PCA思想

PCA 的核心思想是通过矩阵线性变换,找到特征向量和特征值,利用特征值计算方差贡献度决定采用哪几个主成分。主要思考过程如下:

  1. 去除平均值
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值和特征向量
  4. 将特征值排序
  5. 保留前N个最大的特征值对应的特征向量
  6. 将原数据转换到上一步得到的N个特征向量构建的新空间中(即实现降维)

2. PCA算法流程

依据PCA思想,设计PCA具体的算法流程如下:

  • 输入: mm 维样本集 D = (x^{(1)}, x^{(2)}, ……, x^{(m)})D=(x(1),x(2),……,x(m)),以及要降维到的维数nn。

  • 输出: 降维后的样本集 D^{'}D′

  • 算法流程:

  1. 对所有的样本进行中心化:x^{(i)} = x^{(i)} - \frac{1}{m}\sum_{j=1}^m x^{(j)}x(i)=x(i)−m1​∑j=1m​x(j)。
  2. 计算样本的协方差矩阵XX^{T}XXT。
  3. 对矩阵XX^{T}XXT进行特征值分解。
  4. 取出最大的 nn 个特征值对应的特征向量 (w^{1}, w^{2},……, w^{n})(w1,w2,……,wn),将所有的特征向量标准化后,组成特征向量矩阵 WW。
  5. 对样本集中的每一个样本 x^{(i)}x(i),转化为新的样本 z^{(i)} = W^{T}x^{(i)}z(i)=WTx(i)。
  6. 得到输出样本集 D^{'} = (z^{(i)}, z^{(i)},……, z^{(i)})D′=(z(i),z(i),……,z(i))。

3. PCA优缺点

  • 优点: 降低数据的复杂性,可识别出最重要的多个特征。

  • 缺点: 不一定需要,且可能损失有用信息

  • 适用的数据类型: 数值数据类型


第3节 PCA降维案例

1. 案例问题描述

现有样例数据集文件(txt格式),文件名称testSet.txt(分割符为 \t),文件内容如下:

第10章 PCA降维技术

以上数据包含两列数据,即两个维度数据。需要借助PCA 主成分分析方法,对数据降维处理,降到1维(即1 列)

2. 案例解决方法

解决思路

  1. 文件数据内容读取功能以函数封装,通过传递文件路径、分隔符即可读取数据内容,以数组形式返回
  2. PCA降维功能以函数封装,通过传递数据集、降维的维数即可完成数据降维
  • 2.1. 去除平均值
  • 2.2. 计算协方差矩阵
  • 2.3. 计算协方差矩阵的特征值和特征向量
  • 2.4. 将特征值排序
  • 2.5. 保留前N个最大的特征值对应的特征向量
  • 2.6. 将原数据转换到上一步得到的N个特征向量构建的新空间中(即实现降维)

代码实现

step1. 文件数据内容读取功能

文件数据内容读取功能以函数封装,通过传递文件路径、分隔符即可读取数据内容,以数组形式返回

 

## 1. 文件数据内容读取功能 def loadDataSet(fileName, delim='\t'): with open(fileName) as fin: lines = fin.readlines() infoList = [] for line in lines: rList = line.strip().split(delim) ## .strip() 去除前后空格,.split(delim) 按分割符delim 进行分割 infoList.append(list(map(float, rList))) ## map(function, object) 将object 变为 float 类型 return np.mat(infoList)

step2. PCA降维功能

PCA降维功能以函数封装,通过传递数据集、降维的维数即可完成数据降维

 

## 2. PCA降维功能 def myPca(dataMat, topNfeat=9999999): # 2.1.去除平均值 meanVals = np.mean(dataMat, axis=0) # axis=0表示列,axis=1表示行 print('各列的均值:\n', meanVals) # 2.2.计算协方差矩阵 meanRemoved = dataMat - meanVals print('每个向量同时都减去均值:\n', meanRemoved) # 2.3.计算协方差矩阵的特征值和特征向量 covMat = np.cov(meanRemoved, rowvar=0) eigVals, eigVects = np.linalg.eig(np.mat(covMat)) print('特征值:\n', eigVals,'\n特征向量:\n', eigVects) # 2.4.将特征值排序 eigValInd = np.argsort(eigVals) # 特征值从小到大的排序,返回从小到大的index序号 # 2.5.保留前N个最大的特征值对应的特征向量 eigValInd = eigValInd[:-(topNfeat+1):-1] redEigVects = eigVects[:, eigValInd] print('重组n特征向量最大到最小:\n', redEigVects.T) # 特征值方差贡献率 eigValsPer = np.sum(eigVals[eigValInd]) / np.sum(eigVals) # 2.6.将原数据转换到上一步得到的N个特征向量构建的新空间中(即实现降维) lowDDataMat = meanRemoved * redEigVects reconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMat, eigValsPer

step3. 方法调用

通过调用以上方法,实现数据降维,打印相关结果内容

 

import numpy as np fileName = r"testSet.txt" ## 1. 文件数据内容读取功能以函数封装,通过传递文件路径、分隔符即可读取数据内容,以数组形式返回 dataMat = loadDataSet(fileName, delim='\t') # print(dataMat) ## 2. PCA降维功能以函数封装,通过传递数据集、降维的维数即可完成数据降维 lowDmat, reconMat, eigValsPer = myPca(dataMat, topNfeat=1) print('自定义PCA降维前的数据规模如下:\n',np.shape(dataMat)) print('自定义PCA降维后的数据规模如下:\n',np.shape(lowDmat)) print('自定义PCA降维后的原始数据转换至新数据如下:\n', reconMat[0]) print('自定义PCA降维后的数据信息完整度如下:\n', str(round(eigValsPer*100, 2))+"%")

各列的均值:
 [[9.06393644 9.09600218]]
每个向量同时都减去均值:
 [[ 1.17124956  2.22599482]
 [ 1.05840256  2.71499082]
 [ 0.12629956 -0.19105918]
 ...
 [ 0.79098556  0.10539082]
 [ 0.05064356  0.03821282]
 [ 1.27096256 -0.55239818]]
特征值:
 [0.36651371 2.89713496] 
特征向量:
 [[-0.85389096 -0.52045195]
 [ 0.52045195 -0.85389096]]
重组n特征向量最大到最小:
 [[-0.52045195 -0.85389096]]
自定义PCA降维前的数据规模如下:
 (1000, 2)
自定义PCA降维后的数据规模如下:
 (1000, 1)
自定义PCA降维后的原始数据转换至新数据如下:
 [[10.37044569 11.23955536]]
自定义PCA降维后的数据信息完整度如下:
 88.77%

3. sklearn实现方法

基于sklearn 库的 PCA降维功能以函数封装,通过传递数据集、降维的维数即可完成数据降维

 

## 3. 基于sklearn 库的 PCA降维功能 def skPca(dataMat, topNfeat): mySKPca = PCA(n_components=topNfeat) # 加载PCA算法,设置降维后主成分数目为2 # .fit(X) 表示用数据X来训练PCA模型。 # .transform(X) 将数据X转换成降维后的数据。当模型训练好后,对于新输入的数据,都可以用transform方法来降维。 lowDDataMat = mySKPca.fit_transform(dataMat) # .fit_transform(X) 用X来训练PCA模型,同时返回降维后的数据。 reconMat = mySKPca.inverse_transform(lowDDataMat) # .inverse_transform(X) 将降维后的数据转换成原始数据 # components_ :返回具有最大方差的成分。 # n_components_:返回所保留的成分个数n。 # explained_variance_ratio_:返回所保留的n个成分各自的方差百分比。 eigValsPer = np.sum(mySKPca.explained_variance_ratio_) return lowDDataMat, reconMat, eigValsPer

 

from sklearn.decomposition import PCA lowDmat, reconMat, eigValsPer = skPca(dataMat, topNfeat=1) print('sklearn PCA降维前的数据规模如下:\n',np.shape(dataMat)) print('sklearn PCA降维后的数据规模如下:\n',np.shape(lowDmat)) print('sklearn PCA降维后的原始数据转换至新数据如下:\n', reconMat[0]) print('sklearn PCA降维后的数据信息完整度如下:\n', str(round(eigValsPer*100, 2))+"%")

sklearn PCA降维前的数据规模如下:
 (1000, 2)
sklearn PCA降维后的数据规模如下:
 (1000, 1)
sklearn PCA降维后的原始数据转换至新数据如下:
 [10.37044569 11.23955536]
sklearn PCA降维后的数据信息完整度如下:
 88.77%

 

 

 

到了这里,关于第10章 PCA降维技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习实战教程(⑤):使用PCA实战人脸降维

    在互联网大数据场景下,我们经常需要面对高维数据,在对这些数据做分析和可视化的时候,我们通常会面对「高维」这个障碍。在数据挖掘和建模的过程中,高维数据也同样带来大的计算量,占据更多的资源,而且许多变量之间可能存在相关性,从而增加了分析与建模的复

    2024年02月01日
    浏览(48)
  • 结合PCA降维的DBSCAN聚类方法(附Python代码)

      目录 前言介绍: 1、PCA降维: (1)概念解释: (2)实现步骤: (3)优劣相关:  2、DBSCAN聚类: (1)概念解释: (2)算法原理: (3)优劣相关: 代码实现: 0、数据准备: 1、PCA降维: 2、DBSCAN聚类: 3、代码汇总: 实现效果: 1、降维效果: 2、聚类效果: 写在最后

    2024年02月04日
    浏览(37)
  • Python PCA(主成分分析法)降维的两种实现

            PCA降维,一般是用于数据分析和机器学习。它的作用是把一个高维的数据在保留最大信息量的前提下降低到一个低维的空间,从而使我们能够提取数据的主要特征分量,从而得到对数据影响最大的主成分,便于我们对数据进行分析等后续操作。         例如,

    2023年04月17日
    浏览(44)
  • 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型

    效果一览 文章概述 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月13日
    浏览(51)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(42)
  • 机器学习:基于PCA对人脸识别数据降维并建立KNN模型检验

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 大家好,我

    2024年02月01日
    浏览(41)
  • 机器学习(五):混合高斯聚类(求聚类标签)+PCA降维(3维降2维)习题

    使用混合高斯模型 GMM,计算如下数据点的聚类过程: (Data = np.array([1,2,6,7])) 均值初值为: (mu_1, mu_2 = 1, 5) 权重初值为: (w_1, w_2 = 0.5, 0.5) 方差: (std_1, std_2 = 1, 1) (K = 2) 10 次迭代后数据的聚类标签是多少? 采用python代码实现: 聚类标签输出结果: [0 0 1 1] 也就是说,10 次

    2023年04月08日
    浏览(36)
  • 机器学习(五):混合高斯聚类GMM(求聚类标签)+PCA降维(3维降2维)习题

    使用混合高斯模型 GMM,计算如下数据点的聚类过程: (Data = np.array([1,2,6,7])) 均值初值为: (mu_1, mu_2 = 1, 5) 权重初值为: (w_1, w_2 = 0.5, 0.5) 方差: (std_1, std_2 = 1, 1) (K = 2) 10 次迭代后数据的聚类标签是多少? 采用python代码实现: 聚类标签输出结果: [0 0 1 1] 也就是说,10 次

    2023年04月08日
    浏览(35)
  • 特征波长筛选算法有CARS,SPA,GA,MCUVE,光谱数据降维算法以及数据聚类算法PCA

    特征波长筛选算法有CARS,SPA,GA,MCUVE,光谱数据降维算法以及数据聚类算法PCA,KPCA,KNN,HC层次聚类降维,以及SOM数据聚类算法,都是直接替换数据就可以用,程序内有注释,直接替换光谱数据,以及实测值,就可以做特征波长筛选以及数据聚类,同时本人也承接光谱代分

    2024年01月20日
    浏览(42)
  • Rx.NET in Action 中文介绍 前言及序言

    目标 可选方式 Rx 处理器(Operator) 创建 Observable Creating Observables 直接创建 By explicit logic Create Defer 根据范围创建 By specification Range Repeat Generate Timer Interval Return 使用预设 Predefined primitives Throw Never Empty 从其他类型创建 From other types FromEventPattern FromEvent FromTask FromAsync 变换 Transform

    2024年02月13日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包