《机器学习》PCA数据降维 推导、参数讲解、代码演示及分析

2024-09-06 08:28

本文主要是介绍《机器学习》PCA数据降维 推导、参数讲解、代码演示及分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、主成分分析

1、什么是主成分分析?

2、什么是降维?

3、如何进行主成分分析

        1)数据标准化

        2)计算协方差矩阵

        3)计算特征值和特征向量

        4)选择主成分

        5)构建投影矩阵

        6)数据降维

4、为什么要进行主成分分析

        1)数据可视化

        2)数据压缩

        3)特征选择

        4)数据预处理

二、PCA中的数学

1、基

        1)什么是基

        2)图像表示

        3)什么样的向量可以成为基?

2、基变换

        1)基变换的含义

        2)单个二维向量变换

        3)示例

        4)多个二维向量变换

        5)多个多维向量变换

3、如何选择基

        1)如何才能保留较多的原始数据信息?

        2)方差公式

        3)数据特征减去均值

        4)三维空间数据转变到二维图示

        5)协方差

        1、含义

        2、公式

        3、目标

        6)协方差矩阵

        7)人为构建矩阵

        1、目标

        2、原始数据

        3、含义

        4、协方差矩阵对角化

        8)协方差矩阵C对角化

        1、公式

        2、实对称矩阵特性

        3、最终目标

4、求解步骤

5、计算实例

1)特征减去均值

2)计算协方差矩阵

3)计算协方差矩阵的特征值和特征向量

4)矩阵P

5)降维

三、参数解析

1、用法

2、参数

1)n_components:指定希望PCA降维后的特征维度数目

2)copy :bool类型,默认为True。

3)whiten:判断是否进行白化。

4)svd_solver:即指定奇异值分解SVD的方法

3、属性

4、PCA对象方法

四、代码实现

1、完整代码

2、运行结果


一、主成分分析

1、什么是主成分分析?

        主成分分析是一种经典的无监督降维方法,用于将高维数据集投影到一个较低维的子空间中。PCA的目标找到一个新的坐标系,其中新的轴被称为“主成分”,这些主成分是原始数据中方差最大的方向。通过选择较少的主成分,可以保留数据集中的大部分信息,并且可以减少特征的数量,从而降低计算复杂度。

2、什么是降维?

        数据特征又叫做数据的维度,减少数据的特征即是降维

例如:下列数据有四个特征,即四个维度,如何减少他们的维度,同时又保留大部分特征的信息就是接下来的操作。


3、如何进行主成分分析

        1)数据标准化

                将原始数据进行标准化,使每个特征的均值为0,标准差为1。这一步是为了确保不同特征之间的量纲差异不会影响PCA的结果。

        2)计算协方差矩阵

                根据标准化后的数据,计算协方差矩阵。协方差矩阵反映了数据特征之间的相关性。

 

        3)计算特征值和特征向量

                对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示各个特征向量对应的主成分的重要程度,特征向量表示数据在不同主成分上的投影。

 

        4)选择主成分

                根据特征值的大小,选择最大的k个特征值对应的特征向量作为主成分。k的选择一般根据保留的信息量来确定,可以使用特征值的累积贡献率来判断,例如保留总方差的95%。

 

        5)构建投影矩阵

                将选择的k个特征向量按列排成一个投影矩阵,该矩阵将原始数据投影到主成分所构成的子空间。

 

        6)数据降维

                将原始数据通过投影矩阵进行降维,得到降维后的数据集。降维后的数据集仅包含k个主成分,维度减少了。

4、为什么要进行主成分分析

        1)数据可视化

                主成分分析可以将高维数据映射到二维或三维空间中,在可视化分析中提供更好的观察和理解数据的能力。通过将数据投影到较低维度的空间,我们可以更容易地检测数据的分布、聚类和异常值。

 

        2)数据压缩

                主成分分析可以通过保留较高方差的主成分,将数据从高维度降低到低维度。这有助于减少存储空间和计算成本,并提高数据处理效率。

 

        3)特征选择

                主成分分析可以帮助识别出在数据中具有最大方差的特征。通过选择具有较高方差的主成分,我们可以从原始数据中提取出最重要的特征。

 

        4)数据预处理

                主成分分析可以用于数据预处理的步骤。通过将数据投影到较低维度的空间中,我们可以减少噪声和冗余数据,从而改善后续的数据分析和建模结果。

二、PCA中的数学

1、基

        1)什么是基

                基,也称基底,是描述、刻画向量空间的基本工具

        2)图像表示

        如图所示,横纵坐标轴叫做基底单位向量(0,1)和(1,0)叫做这个二维空间的一组基,而向量A的坐标完全由这组基来表示,如下所示:

        注意:这里的x和y和之前的表示不同,之前的是前面多少列为特征集,有一列作为标签列,而现在的则是将原本的数据做了一个转置,得到现在的,前多少行为特征集,有一列作为标签行。即,一列表示一条数据。

        所以这里表示的是这一组基乘以x方向的长度与y方向上的长度,最终得到的值就是这个向量在当前的基底表示的坐标为(3,2)

        3)什么样的向量可以成为基?

                任何两个线性无关二维向量都可以成为一组基,即表示两组向量互相垂直就是线性无关,如下图所示,蓝色线表示一组新的基底,原本的向量映射在不同基底上对应的坐标不同。

2、基变换

        1)基变换的含义

                两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。

                抽象地说,一个矩阵可以表示一种线性变换。

        2)单个二维向量变换

        如图所示,将原本的(x1,x2)基底变换为(y1,y2),此时新的坐标系单位向量坐标则不能表示为(1,1),而应该表示为( 1/\sqrt{2}1/\sqrt{2} )

        此时新的基底的一组基则表示为( 1/\sqrt{2}1/\sqrt{2} ),( -1/\sqrt{2}1/\sqrt{2} ),如下图所示

此时坐标虽然变了,但是模没变,长度还是原来的长度,但是表达方式改变了

        3)示例

                所以此时即可得到原坐标(3,2)转变后的坐标为,(内积的定义):

        4)多个二维向量变换

                其计算方式和上述类似,同样是将新的基底的一组基乘以多个二维向量,得到的新的坐标:

        此时三组向量(1,1),(2,2),(3,3),他们在新的坐标系中表示的坐标为上图所示的状态

        5)多个多维向量变换

上述都是将二维数据映射到二维空间,那么如果是多维数据映射到多维空间呢?如下所示

        上图表示的是n维的向量向R维空间映射,作内积得到的结果为R行m列,因为基的第一行乘以特征第一列得到一个结果,第一行乘以第二列得到第二个几个,然后一行乘以所有的列,得到结果的一行,而基有R行,乘以m列后,得到的结果就为R行m列,即将原本的维度为n的数据,转变成了维度为R的数据,这就是卷积,即一个矩阵和另一个矩阵相乘,将一个矩阵变换到新的空间中。

3、如何选择基

        1)如何才能保留较多的原始数据信息?

如下所示有一堆数据点,将他们映射到新的空间后投影到坐标轴上得到的状态:

        此时可以发现,投影到不同的轴上的数据点紧密程度不同,从而得到投影的轴上的点的分布状态,而数据的离散程度可以用方差来表示,方差越大则表示数据的离散程度越大,如果我们取方差小的当做新的数据,此时点之间的排布非常紧密,很多个点重合在一起,此时则无法满足较多的保存原始数据,所以我们更需要离散程度更高的当做新的数据。

        2)方差公式

        3)数据特征减去均值

        此时问题变为,寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大(二维变一维)。

        4)三维空间数据转变到二维图示

        如图所示,在一个三维空间中,有一堆数据点,想要将这些数据点降维到二维空间,首先要找到一个基,使得这些数据点投影到这个基上面的方差最大,因为要转变的是二维空间,所以找到这样一个基之后需要找第二个基,而这两个基又必须满足线性无关性,所以第二个基需要满足垂直于第一个基的同时又要是方差次大的状态,以此而得到新的基底。

        5)协方差
                1、含义

                        协方差表示两个字段之间的相关性,当协方差为0时,表示两个字段完全独立

                2、公式

                3、目标

                        利用协方差为0,选择另一组基,这组基的方向一定与第一组基正交。

        6)协方差矩阵

                假设我们有a,b两个字段,组成矩阵:X,用X乘以其转置,并乘以1/m:

        此时得到的即为协方差矩阵,可以发现,其对角线上的数据为方差,斜对角线上的数据为协方差,此时如果协方差的值为0,则表示两个字段完全独立。

        7)人为构建矩阵
               1、目标

                        除对角线上的元素外,其余的元素都为0,并且方差从大到小排列

               2、原始数据

                        X --> 协方差矩阵:C

                        一组基按行组成的矩阵:P

                        基变换后的数据:Y—>协方差矩阵:D

                        PX = Y (P为新的基,X为需要降维的数据,P为降维后的数据)

               3、含义

                        寻找一个矩阵P,满足PCP^{T}是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K列就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述条件。

                4、协方差矩阵对角化

        8)协方差矩阵C对角化
                1、公式

                2、实对称矩阵特性

                    实对称矩阵:矩阵的转置等于其本身,实对称矩阵必可对角化

                    对角化:除对角线外其余元素均为0

                3、最终目标

                        P是协方差矩阵C特征向量单位化按行排列出的矩阵,其中每一行都是C的一个特征向量

4、求解步骤

        1)将原始数据按列组成n行m列矩阵X;

        2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

        3)求出协方差矩阵:C=\frac{1}{m}XX^{T}

        4)求出协方差矩阵的特征值及对应的特征向量;

        5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

        6)Y=PX即为降维到k维后的数据。

5、计算实例

        1)特征减去均值

        2)计算协方差矩阵

        3)计算协方差矩阵的特征值和特征向量

        4)矩阵P

        5)降维

三、参数解析

1、用法

PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)[source]

2、参数

        1)n_components:指定希望PCA降维后的特征维度数目

                指定整数,表示要降维到的目标,比如十维的数据,指定n_components=5,表示将十维数据降维到五维,如果为小数,表示累计方差百分比。

        2)copy :bool类型,默认为True。

                表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算

        3)whiten:判断是否进行白化。

                白化就是对降维后的数据的每个特征进行归一化,让方差都为1.默认值是False,即不进行白化。

        4)svd_solver:即指定奇异值分解SVD的方法

                由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。 full则是传统意义上的SVD,使用了scipy库对应的实现。arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。

3、属性

        components_:array, shape (n_components, n_features) 指表示主成分系数矩阵
        explained_variance_:降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。
        explained_variance_ratio_:降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。【一般看比例即可 >90%】

4、PCA对象方法

四、代码实现

1、完整代码

from sklearn.decomposition import PCA  # 导入PCA库
import pandas as pddata = pd.read_excel('hua.xlsx')
x = data.iloc[:,:-1]
y = data.iloc[:,-1]pca = PCA(n_components=0.9)  # 实例化PCA对象,特征维度数目为90%
pca.fit(x)   # 进行训练不需要传入yprint('特征所占百分比{}'.format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)print('PCA降维后数据:')
new_x = pca.transform(x)   # 将原始数据转换成新的维度的数据
print(new_x)   # 数据x在主成分空间中的表示,具体来说,这个方法将数据x从原始特征空间转换到主成分空间from sklearn.model_selection import train_test_split  # 导入切分库x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0)  # 对原始数据切分
# x_train,x_test,y_train,y_test = train_test_split(new_x,y,test_size=0.2,random_state=0)  # 对新维度的数据切分
# 导入逻辑回归分类器
from sklearn.linear_model import LogisticRegression  
classifier = LogisticRegression()
classifier.fit(x_train,y_train)  # 传入训练数据集# 训练集预测
train_predict = classifier.predict(x_train)
print(train_predict)# 测试集预测
test_predict = classifier.predict(x_test)
print(test_predict)from sklearn import metrics
print(metrics.classification_report(y_train,train_predict))
print(metrics.classification_report(y_test, test_predict))

2、运行结果

这篇关于《机器学习》PCA数据降维 推导、参数讲解、代码演示及分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141502

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;