20/80原则——主成分分析

欢迎关注,敬请点赞!

【前20%的人,拥有80%的财富】

线性变换

不改变实质,只改变表达:

比如:将直角坐标系逆时针旋转θ°,行向量(旋转前:[x , y])在新坐标系中的表达是:

[ x y ] [ c o s θ s i n θ s i n θ c o s θ ] \begin{bmatrix}x &y\\\end{bmatrix}\begin{bmatrix} cos\theta & -sin\theta\\ sin\theta & cos\theta\end{bmatrix}\\

主成分分析

主成分分析(PCA,Principal Component Analysis),找到一个投影的向量方向,使数据可释方差最大:
a r g m a x w V a r ( w T X ) = 1 m i m ( w T x i m e a n ( w T x i ) ) argmaxwVar(w^TX) = \frac{1}{m}\sum^m_i(w^Tx_i - mean(w^Tx_i))

奇异值分解

奇异值分解(SVD,Singular Value Decomposition)是计算主成分的方法之一:

1.去中心化(减去平均值)
S = X X . m e a n ( a x i s = 0 ) S = X-X.mean(axis=0)
2.计算协方差矩阵
E ( ( A E ( A ) ) ( B E ( B ) ) ) c o v = 1 N 1 S T S E((A-E(A))(B-E(B)))\\ cov = \frac{1}{N-1}S^TS
3.计算协方差矩阵的特征值(np.linalg.eig)

压缩前图片

返回顶部
致青春

SVD代码

返回顶部

import numpy as np
import matplotlib.pyplot as plt
import cv2


img = cv2.imread("meizi.jpg", 0)
U, sigma, VT = np.linalg.svd(img)
img.shape
(600, 960)
U.shape
(600, 600)
sigma.shape
(600,)
VT.shape
(960, 960)
round(sigma[:170].sum() / sigma.sum(), 2)
0.95
S = np.matrix(np.eye(170) * sigma[:170])
img_press = U[:, :170] * S * VT[:170, :]

处理后图片

返回顶部

plt.imshow(img_press, cmap="gray")

致青春

plt.imsave("press.png", img)

总结:

前20%的特征,就包含了95%的主要特征。

前20%的人,为公司创造80%的价值。
欢迎关注,敬请点赞!
返回顶部

原创文章 43 获赞 14 访问量 2863

猜你喜欢

转载自blog.csdn.net/weixin_45221012/article/details/104760724