机器学习數據降維之主成分分析(PCA)

news2024/9/21 14:14:46

文章目录

  • 前言
  • 数据降维是什么?
    • 维度灾难与降维
    • 作用
  • 主成分分析
    • PCA原理
    • PCA算法
    • 小例
  • 實戰
  • 總結


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容之主成分分析(PCA)


数据降维是什么?

数据降维又称维数约简,就是降低数据的维度。其方法有很多种,从不同角度入手可以有不同的分类,主要分类方法有:根据数据的特性可以划分为线性降维和非线性降维,根据是否考虑和利用数据的监督信息可以划分为无监督降维、有监督降维和半监督降维,根据保持数据的结构可以分为全局保持降维、局部保持降维和全局与局部保持一致降维等。需要根据特定的问题选择合适的数据降维方法。

数据降维一方面可以解决“维数灾难”,缓解信息丰富、知识贫乏的现状,降低复杂度,另一方面可以更好地认识和理解数据。

维度灾难与降维

维度灾难用来描述当空间维度增加时,分析和组织高维空间,因体积指数增加而遇到各种问题场景。例如在高维情况下,数据样本稀疏的问题。例如k近邻算法中,任意样本附近任意小的距离内总能找到一个训练样本,即训练样本的采样密度足够大才能保证分类性能,当特征维度很大时,满足密采样的样本数量会呈现指数级增大,大到几乎无法达到。所以在高维度情况下,涉及距离、内积的计算变得困难。

缓解维度灾难的一个重要途径就是降维。一般来说,想获得低维子空间,最简单的方法就是对原始高维度空间进行线性变换:给定d维空间中的样本X=(x1,x2,···,xm)变换之后得到的d’<=d维空间中的样本Z=W^TX。

变换矩阵W可视为d’个d维基向量,新空间中的属性是原空间属性的线性组合,基于线性变换来进行降维的方法都成线性维方法,主要区别于对低维子空间的性质有所不同,相当于对W施加了不同的约束。

作用

  1. 减少模型分析的数据量,提升处理效率,降低计算难度
  2. 实现数据可视化

主成分分析

主成分分析是一种最常用的无监督降维方法,通过降维技术吧多个变量化为少数几个主成分的统计分析方法。这些主成分能够反映原始变量的绝大部分信息,它们通常表示为原始变量的某种线性组合。

PCA原理

为了便于维度变换有如下假设:

  • 假设样本数据是n维的。
  • 假设原始坐标系为由标准正交基向量{i1,i2,···,in}张成的空间。
  • 假设经过线性变换后的新坐标系为由标准正交基向量{j1,j2,···,jn}张成的空间。

根据定义有:
在这里插入图片描述
记ws=(js·i1,js·i2,···,js·in),其各个分量就是基向量js在原始坐标系中的投影。

根据定义,有:

在这里插入图片描述
令坐标变换矩阵W为:W=(w1,w2,···,wn),则有:
在这里插入图片描述

这样W的第s列就是js在原始坐标系中的投影。

假设样本点xi在原始坐标系中的表示为:

在这里插入图片描述
令其中:

在这里插入图片描述
假设样本点xi在新坐标系中的表示为:

在这里插入图片描述

令其中:

在这里插入图片描述
于是可以推导出:

在这里插入图片描述

丢弃其中的部分坐标,将维度降低到d<n,则样本点xi在低维坐标系中的坐标
在这里插入图片描述

那么,现在出现一个问题,即丢弃哪些坐标?思想是:基于降低之后的坐标重构样本时,尽量要与原始样本接近。

PCA算法

算法的输入为样本集D与低维空间维数d,输出为所求的投影矩阵W。

算法的步骤表现在:

  • 对所有样本进行中心化操作:
    在这里插入图片描述
  • 计算样本的协方差矩阵XX^T。
  • 对协方差矩阵作特征值分解。
  • 取最大的d个特征值对应的特征向量构造投影矩阵W。

通常低维空间维数的选取有两种方法:

  • 通过交叉验证法选取较好的d。
  • 从算法原理角度设置一个阈值,例如t=95%,然后选取使得下式成立的最小的d的值:

在这里插入图片描述

PCA降维有两个准则:

  • 最近重构性:样本集中所有点,重构后的点距离原来点的误差之和最小。
  • 最大可分性:样本点在低维空间的投影尽可能分开。

小例

目标:寻找k(k<n)维新数据,使它们反映事物的主要特征
核心:在信息损失尽可能少的情况下,降低数据维度

在这里插入图片描述
如圖,在我們把二維數據降為一維數據時,我們將其投影到一條直線上,這時為了使信息損失盡可能少,那麽數據投影到直線的距離就應該盡可能小。如果要把2維數據將為0維,那麽數據就丟失掉了,主要特征就沒了,這不是我們想看到的。

類似地,要把三維數據降為二維數據,就需要把三維數據投影到一個平面,然後為了使損失的數據盡可能少,就希望三維數據的各點到這個平面的距離盡可能小。
我們可以把這個投影的線或面理解成主成分,而各點到它們的距離可以理解成損失的信息。

說了這麽多,那麽如何保留主要信息呢?那就是投影後不同的數據要盡可能分得開(即不相關) 這是因為維度很高的數據是有很多的相關性的,而我們希望數據盡可能少,那我們就要保證每個維度裏的數據在不同的維度之間沒有太多的關系,也就可以理解成上述所說的投影後不同的數據要盡可能分得開(即不相關) 。

在这里插入图片描述
通過PCA方法將4維數據降為2維數據後,我們將其可視化,這時藍色代表一類花、橙色代表一類花、綠色代表一類花,這三個不同特征之間是分得比較開的,當已經找不到一個二維平面可以把數據分得比上圖更開,這時信息就是損失得最少的。

在这里插入图片描述

假設我們有n維數據,每個維度的量方是不一樣的,所以第一步我們要進行一個數據預處理。第二步我們得到方差後,可以根據這個方差來判斷相關性的大小,方差越大,它的相關性就越小,方差越小,它的相關性就越大。所以,假設我們有n維數據,如果它的k個維度的方差是比較大的,那麽我們就可以保留下來,另外n-k個維度的方差是比較小的,那麽就可以將其舍棄。

實戰

PCA實戰task:

  1. 基於iris_data.csv數據,建立KNN模型實現數據分類(n_neighbors=3)
  2. 對數據進行標準化處理,選取一個維度可視化處理后的效果
  3. 進行與元數據等維度PCA,查看各主成分的方差比例
  4. 保留合適的主成分,可視化降維后的數據
  5. 基於降維后數據建立KNN模型,與原數據表型進行對比
#load data
import pandas as pd
import numpy as np
data = pd.read_csv('iris_data.csv')
data.head()

在这里插入图片描述

#define X and y
X = data.drop(['target','label'],axis=1)
y = data.loc[:,'label']
X.head()

在这里插入图片描述

#establish knn model and calculate the accuracy
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X,y)
y_predict = KNN.predict(X)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

看一下accuracy_score,越接近1越好

在这里插入图片描述

from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(X)
print(X_norm)

在这里插入图片描述

#calcualte the mean and sigma
x1_mean = X.loc[:,'sepal length'].mean()
x1_norm_mean = X_norm[:,0].mean()
x1_sigma = X.loc[:,'sepal length'].std()
x1_norm_sigma = X_norm[:,0].std()
print(x1_mean,x1_sigma,x1_norm_mean,x1_norm_sigma)

在这里插入图片描述

from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(20,5))
plt.subplot(121)
plt.hist(X.loc[:,'sepal length'],bins=100)
plt.subplot(122)
plt.hist(X_norm[:,0],bins=100)
plt.show()

可視化看一下
在这里插入图片描述

#pca analysis
from sklearn.decomposition import PCA
pca = PCA(n_components=4)
X_pca = pca.fit_transform(X_norm)
#calculate the variance ratio of each principle components
var_ratio = pca.explained_variance_ratio_
print(var_ratio)

可以看出前兩個占的比例比較大,後面兩個不怎麽相關其實可以忽略
在这里插入图片描述

fig2 = plt.figure(figsize=(20,5))
plt.bar([1,2,3,4],var_ratio)
plt.xticks([1,2,3,4],['PC1','PC2','PC3','PC4'])
plt.ylabel('variance  ratio of each PC')
plt.show()

可視化看一下,也是看出後面兩個影響不大

在这里插入图片描述

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_norm)
X_pca.shape

PCA降爲兩維度

在这里插入图片描述

#visualize the PCA result
fig3 = plt.figure(figsize=(10,10))
setosa=plt.scatter(X_pca[:,0][y==0],X_pca[:,1][y==0])
versicolor=plt.scatter(X_pca[:,0][y==1],X_pca[:,1][y==1])
virginica=plt.scatter(X_pca[:,0][y==2],X_pca[:,1][y==2])
plt.legend((setosa,versicolor,virginica),('setosa','versicolor','virginica'))
plt.show()

可視化PCA結果

在这里插入图片描述

KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X_pca,y)
y_predict = KNN.predict(X_pca)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

再KNN訓練一下,accuracy_score可以看出非常接近1已經算不錯了
在这里插入图片描述

總結

PCA實戰summary:

  • 通過計算數據對應主成分(principle components),可在減少數據維度同時盡可能保留主要信息
  • 為確定合適的主成分維度,可先對數據進行與原數據相同維度的PCA處理,再根據哥哥成分的數據方差確認主成分維度

這就是本次學習主要成分分析(PCA)的筆記
附上本次實戰的數據集和源碼:
鏈接:https://github.com/fbozhang/python/tree/master/jupyter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cubeIDE开发,结合汉字取模工具,在LCD输出各种字体

一、汉字取模工具 嵌入式LCD屏显示无非就是不间断刷新LCD宽度*LCD高度的像素矩阵&#xff0c;并为每个像素指定特定颜色。对于LCD屏幕显示汉字&#xff0c;无非就是将字体形状转换为字体宽度*字体高度的像素矩阵&#xff0c;及指定每个字体像素的颜色&#xff0c;然后在LCD屏幕…

点击试剂Methyltetrazine-PEG4-NHS ester,甲基四嗪-PEG4-琥珀酰亚胺酯,CAS:1802907-9

An English name&#xff1a;Methyltetrazine-PEG4-NHS ester Chinese name&#xff1a;甲基四嗪-四聚乙二醇-琥珀酰亚胺酯 Item no&#xff1a;X-CL-1328 CAS&#xff1a;1802907-92-1 Formula&#xff1a;C24H31N5O9 MW&#xff1a;533.54 Purity&#xff1a;95% Avai…

基于MCMC的交通量逆建模(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

《人类简史》笔记四—— 想象构建的秩序

目录 一、盖起金字塔 1、未来的来临 2、 由想象构建的秩序 3、如何维持构建的秩序 二、 记忆过载 三、亚当和夏娃的一天 一、盖起金字塔 1、未来的来临 原始社会&#xff1a; 人口少&#xff1b; 狩猎和采集&#xff1b; 整体活动范围大&#xff08;有几十甚至上百平方…

【怎么理解回流与重绘?以及触发场景】

一、是什么 在HTML中&#xff0c;每个元素都可以理解成一个盒子&#xff0c;在浏览器解析过程中&#xff0c;会涉及到回流与重绘&#xff1a; 回流&#xff1a;布局引擎会根据各种样式计算每个盒子在页面上的大小与位置 重绘&#xff1a;当计算好盒模型的位置、大小及其他属性…

初学Nodejs(5):npm包管理器与包的发布

初学Nodejs 包 1、概念 什么是包 Nodejs中的第三方模块又叫做包。包的来源 不同于Nodejs中的内置模块与自定义模块&#xff0c;包是由第三方个人或团队开发出来的&#xff0c;免费供人使用。&#xff08;nodejs中的包都是免费且开源的&#xff0c;不需要付费即可免费下载使用…

2022年33个最佳WordPress健康与医疗主题

欢迎来到我们针对健康和保健相关网站和博客的最佳WordPress医疗主题的列表。这些涵盖了一切。您可以将它们用于医生、牙医、医院、健康诊所、内科医生、物理治疗师、外科医生以及健康领域的其他任何事物。大家有什么共同点&#xff1f;优质、100% 可定制的布局和 0 编码策略。 …

【论文精读8】MVSNet系列论文详解-UCS-Net

UCS-Net&#xff0c;论文名为&#xff1a;Deep Stereo using Adaptive Thin Volume Representation with Uncertainty Awareness&#xff0c;CVPR2020&#xff08;CCF A&#xff09; 本文是MVSNet系列的第8篇&#xff0c;建议看过【论文精读1】MVSNet系列论文详解-MVSNet之后再…

机器学习之过拟合和欠拟合

文章目录前言什麽是过拟合和欠拟合?过拟合和欠拟合产生的原因&#xff1a;欠拟合(underfitting)&#xff1a;过拟合(overfitting)&#xff1a;解决欠拟合(高偏差)的方法1、模型复杂化2、增加更多的特征&#xff0c;使输入数据具有更强的表达能力3、调整参数和超参数4、增加训练…

Java项目:SSM游戏点评网站

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录…

jenkins-pipeline语法总结(最全)

1、jenkins总结之pipeline语法 jenkins总结之pipeline语法1、jenkins总结之pipeline语法1.1必要的Groovy知识1.2pipeline的组成1.2.1pipeline最简结构1.3post部分1.4pipeline支持的指令• environment&#xff1a;• tools&#xff1a;• input&#xff1a;• options&#xff…

大学网课查题接口

大学网课查题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

项目管理逻辑:老板为什么赔钱的项目也做?为什么害怕你闲着?

目录 1.波士顿矩阵 2.为什么企业还要做没有市场占有率,也没有销售增长率的产品? 2.1项目层级划分 2.2项目集 2.3组合管理 2.4赔钱也做的项目案例 1.波士顿矩阵 项目经理没有资源, 公司不给足够的支持 在任何一个企业老板的脑子里,都会有这样一个矩阵, 纵向表示销售增长…

数据结构与算法,MySQL数据库面试专题及答案

文章目录数据结构面试题及答案数组问题字符串相关问题链表问题二叉树问题编程面试问题之杂项答案数据结构与算法时间复杂度 并不是计算程序具体运行的时间&#xff0c;而是算法执行语句的次数 O(2^n) 表示对 n 数据处理需要进行 2^n 次计算 多项式的时间复杂度 数据 n 在表达式…

Docker安装部署Redis集群

目录 概述 一、创建文件和目录 1.1 创建需要挂载的文件和目录 1.2 同步操作 二、随机从节点模式 2.1 创建master节点的redis容器 2.2 在同一台机器上创建另外2个节点 2.3 其他2台机器同步操作 2.4 配置主从集群 2.4.1 进入任意一个 Redis 实例 2.4.2 配置集群 2.4…

《未来简史:从智人到智神》笔记一——人类的新议题

目录 一、人类的旧议题演变 二、人类的新议题 1、长生不死 2、追求幸福快乐 3、努力把自己升级为神 三、研究历史的意义——不是为了重复过去&#xff0c;而是为了摆脱过去并从中获得解放 四、生命的意义 1、主观体验有两个基本特征 2、生命的意义&#xff1f; 一、人类…

C语言第十三课:初阶指针

目录 前言&#xff1a; 一、指针是什么&#xff1a; 1.那么指针到底是什么呢&#xff1f; 2.内存中的数据存储原理&#xff1a; 3.数据存储与指针使用实例&#xff1a; 4.存储编址原理&#xff1a; 二、指针和指针类型&#xff1a; 1.决定了指针的步长&#xff1a; 2.决定了…

【VSCode + Anaconda】VSCode [WinError 126]找不到指定模块

【VSCode Anaconda】VSCode [WinError 126]找不到指定模块问题解决一解决二问题 在 Anaconda Prompt 中的 python 环境测试&#xff0c;可以使用 import torch 命令 现在在 VSCode 中测试&#xff0c;发现相关异常 图中&#xff0c;已经选择了相应的 conda 环境的 python.exe…

分片集群中的分片集合

分片集群中的分片集合 MongoDB 中 分片集群有专门推荐的模式&#xff0c;例如 分片集合 它是一种基于分片键的逻辑对文档进行分组&#xff0c;分片键的选择对分片是非常重要的&#xff0c;分片键一旦确定&#xff0c;MongoDB 对数据的分片对应用是透明的 mongodb 分片中&#…

MySQL高级语句(三)

一、正则表达式&#xff08;REGEXP&#xff09; 1、正则表达式匹配符 字符解释举列^匹配文本的开始字符’ ^aa ’ 匹配以 aa 开头的字符串$匹配文本的结束字符’ aa$ ’ 匹配以aa结尾的字符串.匹配任何单个字符’ a.b 匹配任何a和b之间有一个字符的字符串*匹配零个或多个在它…