数据降维解析:常见方法Python实操与案例

创始人
2024-12-28 03:53:00
0 次浏览
0 评论

一文带您了解数据降维:常见降维方法及Python示例

数据降维是机器学习和数据分析中的重要工具,其目的是在保留关键信息的同时,通过减少特征数量来简化数据。
在处理高维数据的问题中,降维可以提高计算效率和模型性能。
它就像一个复杂物体的简化投影,保留了关键信息,以便于分析和比较。
我们通过Python例子来探索几种常见的数据降维方法。
以Kaggle的红酒数据集为例,首先需要进行零值检查和标准化预处理。
主成分分析(PCA)等线​​性方法通过在低维空间中查找数据的表示来捕获数据中的线性模式,从而最大化变化。
PCA的Python代码演示了这个过程。
立成分分析(ICA)侧重于独立的信号源,假设原始数据是独立的,例如三种不同的葡萄酒口味。
ICA代码用于将这些独立分量分离为数据的降维表示。
截断奇异值分解(截断SVD)在处理大规模数据时效率很高,尤其擅长处理稀疏矩阵。
MDS(多维缩放)和t-SNE(t分布随机邻域嵌入)等非线性方法侧重于数据点之间的相似性,有助于捕获复杂的非线性关系。
t-SNE的作为改进版本,UMAP更擅长维护全局结构。
选择哪种方法取决于数据的特点和问题的要求。
这不是一个通用的解决方案。
通过上面的Python示例,我们可以看到这些工具如何帮助处理和理解复杂的数据集。

PCA(主成分分析)python实现

回顾了PCA的步骤并用python实现了它。
我深刻地发现,当时所学的特征值和特征向量是如此强大。

PCA是一种无监督学习方法,也是一种非常常见的降维方法。
在数据信息损失最小的情况下,通过映射到另一个空间,将数据特征的数量从n变为k(k

这里我们用二维数据来说明,选择的二维数据是因为二维数据更容易绘制。
下面是数据:

画个图看看分布:

协方差的定义是:

假设n是数据中特征的数量,那么协方差矩阵M是第n个矩阵,其中Mij是第i个和第j个特征的协方差,对角线是每个特征的方差。
在我们的数据中,n=2,所以协方差矩阵为22。
我们可以通过numpy轻松得到:

得到cov的结果是:array([[0.61655556,0.61544444.],[0.61544444,0.71655556]])

既然我们之前已经标准化了,对于我们来说,这个矩阵是data*data的转置矩阵。

得到结果:matrix([[5.549,5.539],[5.539,6.449]])

我们发现,其实协方差矩阵和散度矩阵是密切相关的,散度矩阵是协方差矩阵乘以(数据总和-1)。
因此它们的特征根和特征向量是相同的。
这里值得一提的是,散度矩阵是SVD特定值分解的一个步骤,因此PCA和SVD密切相关,我会尽快详细写出来。

用numpy计算特征根和特征向量非常简,

红线就是特征向量。
有几点值得一提:

蓝色三角形是坐标变换后得到的新点,其实就是将红色原点投影到红蓝线上形成的。

得到特征值和特征向量后,我们可以根据特征值的大小,从大到小选择特征值K对应的特征向量。
这个Python实现也非常简单:

只需从eig_pairs中选择前k个特征向量即可。
这里我们只有两个特征向量,选择较大的一个。

将原始数据与滤波后的特征向量组成的特征矩阵相乘即可​​得到新的数据。

输出:

数据真正变成了一维数据。
最后我们画一张图来了解一下PCA之后的数据会发生什么变化。

五角星是经过PCA处理后得到的一维数据,用来和前面的图进行比较,其实就是红点投影到蓝线上后形成的点。
这就是PCA,通过选择特征的根向量,形成一个新的坐标系,然后将数据投影到这个新的坐标系上,以在尽可能少的信息损失的情况下实现降维。

通过上面的步骤,我们刚刚实现了PCA的第一个2维数据处理,但是原理是一样的,基于此我们可以轻松实现多维数据。

使用sklearn的PCA与我们的计算机进行比较:

获取结果:

尝试使用我们的PCA

获取结果:

完全一致,完美~值得注意的是,sklearn中的PCA实现使用了一些SVD结果,而且确实是密切相关的。

文章标签:
数据降维 PCA
热门文章
1
Java字符串分割技巧:轻松获取逗号前的... java任意一个字符串,当它碰到第一个逗号时,返回逗号前面的字符串,例如:str...

2
SQL多表连接查询全解析:JOIN语句应... sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...

3
Java中字符串类型详解:String与... 变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...

4
JavaSE与JavaEE:从基础到企业... javase 和javaee的区别?JavaSE和JavaEE...

5
Java程序员面试必知:核心技术问答与技... java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...

6
Java.exe与Javaw.exe:区... 程序中java和javaw有什么区别java和javaw的区别:两者都是Java...

7
深入解析:Java中的javax包及其与... JAVA导入时,什么是javax?awt是java1.0,swing是java2...

8
Python编程:两行代码实现正整数相加... python编程上分2行输入两个正整数输出两个数的和、差(要求大数减小数)以下是...

9
Java后端开发薪资水平解析 java后端开发工资一般多少?Java工程师的典型薪资是多少?Java软件工程师...

10
Java包基础:命名空间与代码组织指南 java中的包是什么意思?包是Java中组织代码的基本结构。这种结构可以帮助我们...