失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 吴恩达-机器学习课后题07-PCA-主成分分析法

吴恩达-机器学习课后题07-PCA-主成分分析法

时间:2023-02-04 22:08:45

相关推荐

吴恩达-机器学习课后题07-PCA-主成分分析法

1、预先知识学习

1、什么是PCA:

将数据从二维降至一维/从三维降至二维使得投影距离最小

找到一个更低维度的平面,对数据进行投影,使得投影距离最小

2、使用步骤:

3、U,S,V = np.linalg.svd (C)

此方法用于计算特征值与特征向量,其中

解释1、S返回的是特征值,U返回的是协方差矩阵。?不确定

解释2、总共有三个返回值u,s,v

u大小为(M,M),s大小为(M,N),v大小为(N,N)。

A = usv

其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。

反正要降维,将成几维就在U中取前几就行

2、问题:

将一组二维数据降至一维

3、解题

1、导入数据

mat = sio.loadmat(path)X = mat['X']print(X.shape)plt.scatter(X[:,0],X[:,1])plt.show()

结果:

2、实现数据去均值化及计算协方差矩阵

X_demean = X - np.mean(X,axis=0)C = X_demean.T@X_demean/len(X)#协方差矩阵print(C)

3、进行奇异值分解(特征向量分解)

此处不需要求甚解,只需要知道怎么做即可

U,S,V = np.linalg.svd(C)U1 = U[:,0]

对协方差矩阵C进行奇异值分解,然后需要几维度就从U中取前几列

4、降维

#降维X_reduction = X_demean@U1

此时得到的X_reduction就是降维之后的坐标值,是一维的

5、画出降维之后的坐标轴

因为是按U1进行降维的,所以表示出U1即可

我们知道plot中传入的值是(x,y,c=‘color’)

所以需要两个点分别取其x和y就能表示出一条直线即坐标轴

我们去第一个点为(0,0),第二个点为(U1[:,0],U1[:,1])

plt.scatter(X_demean[:,0],X_demean[:,1])plt.plot([0,U1[0]],[0,U1[1]],c='r')plt.show()

结果:

6、画出另外一条坐标轴

因为将X_demean降维在了U[:,0]这个向量上,所以另外一个向量U[:,1]是另外一个维度:

X_reduction = X_demean@U1plt.scatter(X_demean[:,0],X_demean[:,1])plt.plot([0,U1[0]],[0,U1[1]],c='r')plt.plot([0,U[0,1]],[0,U[1,1]],c='k')plt.show()

结果:

我们看出,这两条直线并不像是垂直的,主要是因为我们这个坐标系显示的横纵不一样长,改变一下图像的大小

X_reduction = X_demean@U1plt.figure(figsize=(7,7))plt.scatter(X_demean[:,0],X_demean[:,1])plt.plot([0,U1[0]],[0,U1[1]],c='r')plt.plot([0,U[0,1]],[0,U[1,1]],c='k')plt.show()

结果:

7、还原数据

(1)查看当前数据维度:

print(X_reduction.shape)

当前维度为(50,)我们将其还原成(50,1)然后乘以U1.reshape(50,2)就会变回(50,2)的维度

我们将数据还原成原来的

(2)还原:

X_restore = X_reduction.reshape(50,1)@U1.reshape(1,2)+np.mean(X)plt.figure(figsize=(7,7))plt.scatter(X[:,0],X[:,1])plt.scatter(X_restore[:,0],X_restore[:,1])plt.plot([U1[0],-5*U1[0]],[U1[1],-5*U1[1]],c='r')plt.show()

结果:

可以看出轴线与还原之后的数据之间差一个 均值

不加均值还原:

如果觉得《吴恩达-机器学习课后题07-PCA-主成分分析法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。