协方差理解,PCA以及奇异值分解(SVD)

一.PCA

PCA通过正交变换将一组由线性相关变量表示的数据转换为少数几个由线性无关变量表示的数据,这几个线性无关的变量就是主成分。PCA通过将高维数据维度减少到少数几个维度,本质上属于一种数据降维方法,也可以用来探索数据的内在结构。 

可看出如果两个随机变量的分布相似,它们的协方差很大。 

 

 

import numpy as npclass PCA():# 计算协方差矩阵def calculate_covariance_matrix(self, X):m = X.shape[0]# 数据标准化X = X - np.mean(X, axis=0)#(x1 - Ex1) (x2 - Ex2)return 1 / m * np.matmul(X.T, X)def compute_feature(self, X, n_components):# 计算协方差矩阵covariance_matrix = self.calculate_covariance_matrix(X)print('==covariance_matrix:', covariance_matrix.shape)# 计算协方差矩阵的特征值和对应特征向量eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)print('=eigenvectors.shape:', eigenvectors.shape)# 对特征值排序idx = eigenvalues.argsort()[::-1]# 取最大的前n_component组eigenvectors = eigenvectors[:, idx]eigenvectors = eigenvectors[:, :n_components]# Y=PX转换return np.matmul(X, eigenvectors)#两个样本 一个样本有三维
X = np.array([[4, 1, 3],[2, 2, 4]])
print('X:', X)
pca = PCA()
Y = pca.compute_feature(X, 2)#降到2维
print('Y:', Y)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import Axes3Ddef plot_digits(images, y, max_n=10):"""显示手写数字的图像"""# 设置图像尺寸fig = plt.figure(figsize=(2. * n_col, 2.26 * n_row))i = 0while i < max_n and i < images.shape[0]:p = fig.add_subplot(n_row, n_col, i + 1, xticks=[], yticks=[])p.imshow(images[i], cmap=plt.cm.bone, interpolation='nearest')# 添加标签p.text(0, -1, str(y[i]))i = i + 1plt.show()# 显示8*8数字
# plot_digits(digits.images, digits.target, max_n=10)def plot_pca_scatter_three(digits, X_pca, y_digits, class_nums):"""主成分显示"""##显示3Dfig = plt.figure()ax = fig.add_subplot(111, projection='3d')for i in range(len(class_nums)):# print('==y_digits == i:', y_digits == i)print(X_pca[:, 0][y_digits == i].shape)print(X_pca[:, 1][y_digits == i].shape)print(X_pca[:, 2][y_digits == i].shape)ax.scatter(X_pca[:, 0][y_digits == i], X_pca[:, 1][y_digits == i], X_pca[:, 2][y_digits == i], label = class_nums[i])plt.legend(digits.target_names)ax.set_xlabel('First Principal Component')ax.set_ylabel('Second Principal Component')ax.set_zlabel('Third Principal Component')plt.savefig('./three.jpg')plt.show()def plot_pca_scatter_two(digits, X_pca, y_digits, class_nums):# 显示2Dfor i in range(len(class_nums)):px = X_pca[:, 0][y_digits == i]py = X_pca[:, 1][y_digits == i]plt.scatter(px, py, label=class_nums[i])plt.legend(digits.target_names)plt.xlabel('First Principal Component')plt.ylabel('Second Principal Component')plt.savefig('./two.jpg')plt.show()def pca_aysis_two_components():digits = load_digits()X_digits, y_digits = digits.data, digits.target# n_row, n_col = 2, 5print('=X_digits.shape:', X_digits.shape)print('==y_digits:', y_digits[:10])print(len(y_digits))class_nums = [i for i in range(10)]n_components = 2  # 取前2个主成分pca = PCA(n_components=n_components)# fit_transform表示做完训练以后并进行转换X_pca = pca.fit_transform(X_digits)print('==X_pca.shape:', X_pca.shape)plot_pca_scatter_two(digits, X_pca, y_digits, class_nums)def pca_aysis_three_components():digits = load_digits()X_digits, y_digits = digits.data, digits.targetprint('=X_digits.shape:', X_digits.shape)print('==y_digits:', y_digits[:10])print(len(y_digits))class_nums = [i for i in range(10)]n_components = 3  # 取前2个主成分pca = PCA(n_components=n_components)# fit_transform表示做完训练以后并进行转换X_pca = pca.fit_transform(X_digits)print('==X_pca.shape:', X_pca.shape)plot_pca_scatter_three(digits, X_pca, y_digits, class_nums)if __name__ == '__main__':# pca_aysis_two_components()pca_aysis_three_components()

可视化二维的时候:

 

可视化三维的时候:

二.SVD

numpy案例

A = np.array([[4, 1, 3],[2, 2, 4]])
print('A:\n', A)# 对其进行SVD分解 s是对角矩阵的值
u, s, vt = np.linalg.svd(A, full_matrices=True)
print('u.shape, s.shape, vt.shape:', u.shape, s.shape, vt.shape)
res = np.dot(u*s, vt[:2, :])
print('res:', res)
#U UT=I
print('np.dot(u, u.T):\n', np.dot(u, u.T))
#v vT=I
print('np.dot(vt, vt.T):\n', np.dot(vt, vt.T))

将SVD用于图像的压缩算法。其原理就是保存像素矩阵的前k个奇异值,并在此基础上做图像恢复。由SVD的原理我们可以知道,在SVD分解中越靠前的奇异值越重要,代表的信息含量越大。 


import cv2
import numpy as np
import os
from tqdm import tqdm# 定义恢复函数,由分解后的矩阵恢复到原矩阵
def restore(u, s, v, K):'''u:左奇异矩阵 u uT=Iv:右奇异矩阵 v vT=Is:奇异值矩阵 对角矩阵K:奇异值个数'''m, n = len(u), len(v)a = np.zeros((m, n))for k in range(K):uk = u[:, k].reshape(m, 1)vk = v[k].reshape(1, n)# 前k个奇异值的加总a += np.dot(uk * s[k], vk)a = a.clip(0, 255)return np.rint(a).astype('uint8')img = cv2.imread("./111.png")
print('==img.shape:', img.shape)
h,w,_ = img.shape
# 对RGB图像进行奇异值分解
u_b, s_b, v_b = np.linalg.svd(img[:, :, 0])
u_g, s_g, v_g = np.linalg.svd(img[:, :, 1])
u_r, s_r, v_r = np.linalg.svd(img[:, :, 2])print('==u_b.shape, s_b.shape, v_b.shape:', u_b.shape, s_b.shape, v_b.shape)
B = np.dot(u_b * s_b, v_b[:h, :])
print('B:', B.shape)G = np.dot(u_g * s_g, v_g[:h, :])
print('G:', G.shape)R = np.dot(u_r * s_r, v_r[:h, :])
print('R:', R.shape)# # 使用前短边个奇异值
K = min(img.shape[:2])
new_img = cv2.merge([B, G, R])
cv2.imwrite('./test_svd.jpg', new_img)# # 恢复图像
ouput_path = './svd'
os.makedirs(ouput_path, exist_ok=True)
for k in tqdm(range(1, K + 1)):B = restore(u_b, s_b, v_b, k)R = restore(u_r, s_r, v_r, k)G = restore(u_g, s_g, v_g, k)new_img = cv2.merge([B, G, R])cv2.imwrite(os.path.join(ouput_path, '{}.jpg'.format(k)), new_img)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET MVC获取上传的路径

刚才有网友问及&#xff0c;怎样获取<input typefile>的值&#xff1f; Insus.NET测试了一下&#xff0c;在Inetnet Explor之下似乎没有问题&#xff0c;但是FireFox获取到的只是文件名。 在MVC的控制器中&#xff0c;创建一个视图Action&#xff0c;超简单如下&#xff…

python的继承与多态

一.继承 class Person(object):def __init__(self, name, sex):self.name nameself.sex sexdef print_title(self):if self.sex "male":print("man")elif self.sex "female":print("woman")class Child(Person): # Child 继承 …

如何在算法交易中使用AI?摩根大通发布新版指南

来源 &#xff1a;efinancialcareers.com作者 &#xff1a;Sarah Butcher编译&#xff1a;机器之能 张玺摘要&#xff1a;如果你对银行与金融领域的 AI 应用有兴趣的话&#xff0c;你肯定了解 JPM&#xff08;摩根大通&#xff09;最近十年对大数据和人工智能的出色运用&#x…

生命简史

来源「新原理研究所」&#xff08;ID&#xff1a;newprincipia&#xff09;摘要&#xff1a;地球上的生命是如何开始的&#xff1f;未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&…

Array()数组

数组的定义 var arr [1, 2, 3, 4, "one", "two", "three", "four"]; //一维数组 var props [["拳头", "刀", "枪"], ["boxing", "knife ", "gun"]]; //二维数组 调用 …

成立 5 周年:一文览尽 Facebook 人工智能研究院历年重要成果

来源&#xff1a;AI科技评论五年前&#xff0c;Yann LeCun 等人创建了 Facebook 人工智能研究院 (Facebook AI Research&#xff0c;FAIR)&#xff0c;试图通过开放的研究环境促进人工智能的发展&#xff0c;进而造福所有人——他们努力的目的是为了理解智慧的本质&#xff0c;…

利用opencv对图像和检测框做任意角度的旋转

一.钢筋比赛中的数据扩充 #coding:utf-8 #数据集扩增 import cv2 import math import numpy as np import xml.etree.ElementTree as ET import osdef rotate_image(src, angle, scale1):w src.shape[1]h src.shape[0]# 角度变弧度rangle np.deg2rad(angle) # angle in r…

中国科学家将绘制最精细人脑三维“地图”

骆清铭在检查实验结果。&#xff08;受访者供图&#xff09;来源&#xff1a;新华社客户端作者&#xff1a;喻菲 胡喆 李博 夏鹏为什么有的大脑能洞见美妙的宇宙法则&#xff0c;有的能创作出扣人心弦的乐曲与画作&#xff1f;记忆和意识是如何产生的&#xff1f;人类虽已能观察…

python解析xml+得到pascal voc xml格式用于目标检测+美化xml

1.python解析xml img_path./data/001.tifxml_path./xml/001.xmlimgcv2.imread(img_path)# cv2.imshow(img, img)# cv2.waitKey(0)print(img.shape)try:xmlp ET.XMLParser(encoding"utf-8")tree ET.parse(xml_path, parserxmlp)root tree.getroot()print(tree)prin…

美权威报告:量子计算十年内无法落地

来源&#xff1a;云头条摘要&#xff1a;美国方面称&#xff0c;它对这项复杂的技术何时真正大有用武之地毫无头绪。美国国家科学、工程和医学科学院本周发布了一份介绍量子计算现状的报告。考虑到有人推测这类设备可能使目前的加密方案变得毫无价值&#xff0c;这个话题令人不…

“深绿” 及 AlphaGo 对指挥与控制智能化的启示

来源&#xff1a;《指挥与控制学报》摘要&#xff1a; 随着未来战争日趋复杂、人工智能突飞猛进, 指挥与控制向智能化发展成为大势所趋. 美军的 “深绿” 计划项目虽因各 种原因暂停, 但其思路和方法值得借鉴. AlphaGo 在围棋领域战胜人类顶尖水平, 其采用的方法也有一定的参考…

熵的基础知识,特征工程,特征归一化,交叉验证,grid search,模型存储与加载

1.自信息&#xff1a; 2.信息熵 3.p对Q的KL散度&#xff08;相对熵&#xff09; 证明kl散度大于等于0 4.交叉熵 可看出交叉熵信息熵相对熵 数据集地址&#xff1a;水果数据集_机器学习水果识别,水果分类数据集-机器学习其他资源-CSDN下载 一&#xff0c;类别型特征和有序性特…

5G与AI深度融合,人类世界即将产生巨变

来源&#xff1a;系数据观整理自网络摘要&#xff1a;近几年&#xff0c;科技界有两大领域越来越热&#xff1a;一个是5G&#xff0c;一个是AI。两者都是能够改变时代的颠覆性技术。单独看5G或AI技术&#xff0c;它们的发展都面临重重挑战&#xff0c; 我们不妨脑洞大开&#x…

统计学第一章--最小二乘拟合正弦函数,正则化

#coding:utf-8 import numpy as np import scipy as sp from scipy.optimize import leastsq import matplotlib.pyplot as plt # 目标函数 def real_func(x):return np.sin(2*np.pi*x)# 多项式 def fit_func(p, x):f np.poly1d(p)# print(f,f)return f(x)# 残差 def residual…

装配式建筑连入自动驾驶技术,未来城市的房子居然是这个样子......

来源&#xff1a;gooood谷德设计网概念如果说古典的城市是关于神的&#xff0c;现代城市是关于资本和权力的&#xff0c;那么未来的城市就应该是关于人与自然的。人在朝朝暮暮&#xff0c;山山水水&#xff0c;风风雨雨&#xff0c;一草一木天地之间无不有感而发&#xff0c;触…

iOS6新特征:UICollectionView介绍-非常棒 -转

传送门&#xff1a;http://www.devdiv.com/forum.php?modviewthread&tid128378 转载于:https://www.cnblogs.com/ygm900/p/3652681.html

ROC曲线,AUC值,PR曲线,AP值

Receiver Operating Characteristic (ROC) with cross validation — scikit-learn 1.0.2 documentation Precision-Recall — scikit-learn 1.0.2 documentation 一&#xff0c;ROC 横轴&#xff1a;负正类率(false postive rate FPR)特异度&#xff0c;划分实例中所有负例…

报告:最大化人工智能(AI)机遇

来源&#xff1a;199IT互联网数据中心Microsoft发布了新报告“最大化AI机遇”&#xff0c;深入调查了数字转型的一个重要的技术力量&#xff0c;人工智能&#xff08;AI&#xff09;。报告将其定义为让计算机像人一样观察、学习、分析和评价以进行决策&#xff0c;解决问题的一…

统计学基本知识一

声明&#xff1a;文中的图来自于可汗学院公开课&#xff0c;若有侵权&#xff0c;联系我删除。 均值&#xff1a;一组数相加后除以这一组数的个数。 中位数&#xff1a;一组数从小到大排列&#xff0c;最中间的那个数&#xff0c;如果是偶数个&#xff0c;两个相加后除以2&am…

中科院陆汝钤获吴文俊人工智能最高成就奖,百度王海峰获吴文俊人工智能杰出贡献奖...

来源&#xff1a;AI 科技评论12 月 9 日上午&#xff0c;被誉为「中国智能科学技术最高奖」的吴文俊人工智能科学技术奖在苏州举行颁奖典礼。本届吴文俊人工智能奖共对 70 项人工智能成果授奖&#xff0c;包括吴文俊人工智能最高成就奖 1 项&#xff0c;吴文俊人工智能杰出贡献…