A. PCA(主成分分析)python实现
回顾了下PCA的步骤,并用python实现。深刻的发现当年学的特征值、特征向量好强大。
PCA是一种无监督的学习方式,是一种很常用的降维方法。在数据信息损失最小的情况下,将数据的特征数量由n,通过映射到另一个空间的方式,变为k(k<n)。
这里用一个2维的数据来说明PCA,选择2维的数据是因为2维的比较容易画图。
这是数据:
画个图看看分布情况:
协方差的定义为:
假设n为数据的特征数,那么协方差矩阵M, 为一个n n的矩阵,其中Mij为第i和第j个特征的协方差,对角线是各个特征的方差。
在我们的数据中,n=2,所以协方差矩阵是2 2的,
通过numpy我们可以很方便的得到:
得到cov的结果为:
array([[ 0.61655556, 0.61544444],
[ 0.61544444, 0.71655556]])
由于我们之前已经做过normalization,因此对于我们来说,
这个矩阵就是 data*data的转置矩阵。
得到结果:
matrix([[ 5.549, 5.539],
[ 5.539, 6.449]])
我们发现,其实协方差矩阵和散度矩阵关系密切,散度矩阵 就是协方差矩阵乘以(总数据量-1)。因此他们的 特征根 和 特征向量 是一样的。这里值得注意的一点就是,散度矩阵是 SVD奇异值分解 的一步,因此PCA和SVD是有很大联系的,他们的关系这里就不详细谈了,以后有机会再写下。
用numpy计算特征根和特征向量很简单,
但是他们代表的意义非常有意思,让我们将特征向量加到我们原来的图里:
其中红线就是特征向量。有几点值得注意:
蓝色的三角形就是经过坐标变换后得到的新点,其实他就是红色原点投影到红线、蓝线形成的。
得到特征值和特征向量之后,我们可以根据 特征值 的大小,从大到小的选择K个特征值对应的特征向量。
这个用python的实现也很简单:
从eig_pairs选取前k个特征向量就行。这里,我们只有两个特征向量,选一个最大的。
主要将原来的数据乘以经过筛选的特征向量组成的特征矩阵之后,就可以得到新的数据了。
output:
数据果然变成了一维的数据。
最后我们通过画图来理解下数据经过PCA到底发生了什么。
绿色的五角星是PCA处理过后得到的一维数据,为了能跟以前的图对比,将他们的高度定位1.2,其实就是红色圆点投影到蓝色线之后形成的点。这就是PCA,通过选择特征根向量,形成新的坐标系,然后数据投影到这个新的坐标系,在尽可能少的丢失信息的基础上实现降维。
通过上述几步的处理,我们简单的实现了PCA第一个2维数据的处理,但是原理就是这样,我们可以很轻易的就依此实现多维的。
用sklearn的PCA与我们的pca做个比较:
得到结果:
用我们的pca试试
得到结果:
完全一致,完美~
值得一提的是,sklearn中PCA的实现,用了部分SVD的结果,果然他们因缘匪浅。
B. Python 编程,绘图与矩阵,详细在图里,求代码,急用
import numpy as np
a=np.mat('-1,4,0;3,4,-4;-10,-12,5')
b=np.mat('-72;-4;-50')
c=np.linalg.solve(a,b)
print(c)
C. python热力图colorbar怎么画
本文将讲解如何在Python中绘制热力图并添加colorbar。热力图是一种可视化矩阵数据的图形,通过颜色深浅表示数据的大小。
在Python中,我们可以使用matplotlib库中的imshow函数来创建普通热图,但seaborn库则提供了更简洁的方法。seaborn的heatmap函数可以直观地生成热力图。
要绘制一个热力图,您首先需要准备一个二维数组,它将作为热力图的数据源。然后,调用seaborn的heatmap函数,传入数据源和相关参数,例如颜色映射(colormap)和colorbar位置。
颜色映射用于将数据值映射到颜色上,通常选择如'coolwarm'、'viridis'或'plasma'等预定义的颜色映射,以直观地表示数据的分布。colorbar是热力图中用来指示颜色映射与数据值对应关系的辅助工具,它通常位于热力图的底部或右侧。
绘制热力图并添加colorbar的过程非常直观,且能够为数据分析提供强大的支持。通过合理选择颜色映射和调整colorbar的位置,您可以使热力图更加美观和易于解读。
在绘制热力图时,我们还可以进一步自定义颜色映射的范围、透明度、标签等,以满足具体分析需求。总之,seaborn库为绘制热力图提供了一个简洁、灵活的解决方案,能够帮助我们更有效地探索和呈现数据间的关联。