主成分分析法(PCA方法)的理论与代码实现

归因分析笔记4:PCA逆变换 PCA转回原特征 例1 参考: https://www.cnpython.com/qa/81148 sklearn的PCA 转换是怎样手算, 如何执行反变换。pca对象的哪个字段包含反变换的相关系数?如何计算反变换? 具体来说,我指的是sklearn.decomposition.PCA package中提供的PCA.inverse_transform()方法调用:如何使用PCA计算的各种系数重现其功能? 1)transform不是data * pca.components_。 阅读详情

序

这个,怎么实现?

不知道,这是个数学问题,还是个编程问题。

找了个网页:

http://blog.codinglabs.org/articles/pca-tutorial.htmlhttp://blog.codinglabs.org/articles/pca-tutorial.html网页不咋生动,又找了个视频:

https://www.bilibili.com/video/BV1E5411E71z?spm_id_from=333.337.top_right_bar_window_custom_collection.content.clickhttps://www.bilibili.com/video/BV1E5411E71z?spm_id_from=333.337.top_right_bar_window_custom_collection.content.click

作为一个小小白,脑子也不好使。对于学习这件事,也不指望学会,不指望全如意;你自己尽力,有个半称心就行了。

实在学不会,被别人拿去笑话一下,给别人长一点自信,当个搞笑角色,也不错嘛——有输入,总会有点输出的嘛。

下面是视频里的截图。

理论介绍

PCA的目的

 PCA的过程全览

一些  预备内容

矩阵变换的介绍

拉伸

 旋转

 PCA的过程,其实是可逆的,互逆的。

拉伸:决定了方差最大的方向是横还是纵

旋转:决定了方差最大的方向的角度

 关键是求R,R是什么?

 

 

 

 协方差矩阵的公式:(因为去中心化了,所以平均值都是0,公式里就没这一项了)

 根据上面那个公式,推到D'的协方差矩阵:

S是个对角阵,转不转置,结果一样

 D‘的协方差矩阵,的特征向量

根据矩阵的特征向量的定义可得:

 按矩阵乘法的规则组合一下

 两个一列的向量可以用一个两列的向量来代替的。

拿东西,分为开门,拿,关门;三个步骤。一个行为有开门,拿,关门,三个步骤,所以这个行为叫拿东西。

变个形,发现这个推导出来的R,和旋转的那个R,是一个玩意。

RLR^{-1}=RLR^{-1}=C{}'

 所以,那俩特征向量,就是两个主成分的方向,这个信息在R里。

那俩特征值,表示沿着两个主成分被拉伸的程度,这个信息在L里。

 怪不得要找最大的特征值。 

 L是是在R'这组基下的协方差矩阵吧??

 大概就这样吧……

借助numpy的编程实现

那末,怎么编程求这个所谓的协方差矩阵的两个特征值和特征向量啊?

找了个参考的链接,里面有代码的。

https://gitee.com/ni1o1/pygeo-tutorial/blob/master/12-.ipynbhttps://gitee.com/ni1o1/pygeo-tutorial/blob/master/12-.ipynb

实现的话,缺少一些numpy方面的知识。那就去调查研究一下嘛:

作为一个小小白,从几个简单例子开始吧

第一段

import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
print(data)

 输出结果

参考链接

numpy的seedhttps://blog.youkuaiyun.com/qq_34840129/article/details/86096803?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873185016780261914117%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164873185016780261914117&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-86096803.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=numpy.random.seed&spm=1018.2226.3001.4187【Numpy】中np.random.uniform()函数用法https://blog.youkuaiyun.com/lemonxiaoxiao/article/details/109244755?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873203116780264067624%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164873203116780264067624&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-109244755.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=np.random.uniform&spm=1018.2226.3001.4187

第二段

import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))
print(data)

 参考链接

Numpy.array中[:]和[::]的区别https://blog.youkuaiyun.com/zhuqiang9607/article/details/83903487?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873302316780357253756%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164873302316780357253756&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-83903487.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=numpy+%3A&spm=1018.2226.3001.4187numpy 数组X[:,0]和X[:,1]的详解https://blog.youkuaiyun.com/doubledog1112/article/details/85095571?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all_pay~es_rank~default-2-85095571.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=numpy+%5B%3A%5D&spm=1018.2226.3001.4187python中数组切片含义解析https://blog.youkuaiyun.com/weixin_44676142/article/details/109457879?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_aa&utm_relevant_index=1

第三段

# 计算以下数据的协方差矩阵
import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
print(data_norm)

numpy中的mean()函数https://blog.youkuaiyun.com/lilong117194/article/details/78397329?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873387416782094885028%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164873387416782094885028&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-78397329.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=numpy+mean&spm=1018.2226.3001.4187

第四段

# 计算以下数据的协方差矩阵
import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
#print(data_norm)

X = data_norm[:,0]
Y = data_norm[:,1]

# 定义一个函数,输入X,Y能得到X,Y之间的协方差
def getcov(X,Y):
    covxy = ((X-X.mean())*(Y-Y.mean())).sum()/(len(X)-1)
    return covxy

print (getcov(X,X))#这里求的是X的方差
print(getcov(Y,Y))#Y的方差
print(getcov(X,Y))#协方差

 第五段

# 计算以下数据的协方差矩阵
import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
#print(data_norm)

X = data_norm[:,0]
Y = data_norm[:,1]

# 定义一个函数,输入X,Y能得到X,Y之间的协方差
def getcov(X,Y):
    covxy = ((X-X.mean())*(Y-Y.mean())).sum()/(len(X)-1)
    return covxy

print (getcov(X,X))#这里求的是X的方差
print(getcov(Y,Y))#Y的方差
print(getcov(X,Y))#协方差

#numpy自带了协方差矩阵的计算方法,验证一下
C = np.cov(data_norm.T)#为什么要转置?
print(C)

 为什么要转置一下?

官方文档里这么说的

 这还有个中文翻译版的官方文档:

Numpy入门(十):np.cov()用法https://blog.youkuaiyun.com/weixin_46348799/article/details/108963194?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873551916780274141001%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164873551916780274141001&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-108963194.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=np.cov&spm=1018.2226.3001.4187

第六段

受上面那个中文翻译版的官方文档的启发,摸索了一下:

结果一样的。

# 计算以下数据的协方差矩阵
import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
#print(data_norm)

X = data_norm[:,0]
Y = data_norm[:,1]

# 定义一个函数,输入X,Y能得到X,Y之间的协方差
def getcov(X,Y):
    covxy = ((X-X.mean())*(Y-Y.mean())).sum()/(len(X)-1)
    return covxy

print (getcov(X,X))#这里求的是X的方差
print(getcov(Y,Y))#Y的方差
print(getcov(X,Y))#协方差

#numpy自带了协方差矩阵的计算方法,验证一下
C = np.cov(data_norm.T)#为什么要转置?因为一个参数表示一个变量,所以要把10*2转置成2*10
print(C)

C=np.cov(data_norm,rowvar=False)## 此时列为变量计算方式 即X为列,Y也为列
print(C)

第七段 

然后,这个协方差矩阵的特征值和特征向量,怎么算?口算?

# 计算以下数据的协方差矩阵
import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵

X = data_norm[:,0]
Y = data_norm[:,1]

C=np.cov(data_norm,rowvar=False)## 此时列为变量计算方式 即X为列,Y也为列

#计算特征值和特征向量
vals, vecs = np.linalg.eig(C)
#重新排序,从大到小
vecs = vecs[:,np.argsort(-vals)]
vals = vals[np.argsort(-vals)]

print(vecs)
print(vals)


如何计算方阵的特征值和特征向量np.linalg.eig()https://blog.youkuaiyun.com/qq_38048756/article/details/112543075?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873654816781685326133%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164873654816781685326133&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-3-112543075.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=np.linalg.eig&spm=1018.2226.3001.4187

Numpy学习之np.argsort()函数https://blog.youkuaiyun.com/m0_46457700/article/details/109408524?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&utm_relevant_index=2【Python语法】X[:,0]和X[:,1] 什么意思?https://blog.youkuaiyun.com/Higan_MM/article/details/90410095?ops_request_misc=&request_id=&biz_id=102&utm_term=%E3%80%90%EF%BC%9A%EF%BC%8C0%E3%80%91&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-90410095.nonecase&spm=1018.2226.3001.4187

这是一个手算特征值和计算机算的对比的例子,挺形象的。可以直观的看出,特征向量是按列看的。不是按行看的。

python — numpy计算矩阵特征值,特征向量https://blog.youkuaiyun.com/pentiumCM/article/details/105652853?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~TopBlog-1.topblog&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~TopBlog-1.topblog&utm_relevant_index=1

第八段(小结)

# 计算以下数据的协方差矩阵
import numpy as np
np.random.seed(0)#随机数种子
data = np.random.uniform(1,10,(10,2))
data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵

X = data_norm[:,0]
Y = data_norm[:,1]

C=np.cov(data_norm,rowvar=False)## 此时列为变量计算方式 即X为列,Y也为列

#计算特征值和特征向量
#这个返回的特征向量,要按列来看
vals, vecs = np.linalg.eig(C)

#重新排序,从大到小
#默认从小到大排列,这里取负了,就是从大到小排列,返回相应索引
vecs = vecs[:,np.argsort(-vals)]#特征向量按列取,这里就呼应上了
vals = vals[np.argsort(-vals)]

print(vals)
print(vecs)

#第一个特征值对应的特征向量
print(vals[0],vecs[:,0])
#第二个特征值对应的特征向量
print(vals[1],vecs[:,1])

 这个特征向量都是长度单位化以后的。

NumPy.array 求点乘, 向量长度, 向量夹角的方法https://blog.youkuaiyun.com/qq_32424059/article/details/100874358?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164873936216781685383416%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164873936216781685383416&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-100874358.142%5Ev5%5Epc_search_insert_es_download,143%5Ev6%5Eregister&utm_term=numpy+%E5%90%91%E9%87%8F%E9%95%BF&spm=1018.2226.3001.4187

 实际应用

怎么实际运用呢?更是一个大问题。这个矛盾解决了那个矛盾又出来了,矛盾也有新陈代谢。没有矛盾就没有世界呐。

第一段

简单测试了一下:

# 计算以下数据的协方差矩阵
import numpy as np

# np.random.seed(0)#随机数种子
# data = np.random.uniform(1,10,(10,2))
# data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#不用随机数了,这次用一个比较实际的例子,来测试PCA准不准
#假设这是一个扁扁的矩形
input=list()
input.append([100,100])
input.append([500,100])
input.append([100,200])
input.append([500,200])
print(input)

#从已有的数组创建数组
data=np.asarray(input)
print(data)

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵

X = data_norm[:,0]
Y = data_norm[:,1]

C=np.cov(data_norm,rowvar=False)## 此时列为变量计算方式 即X为列,Y也为列

#计算特征值和特征向量
#这个返回的特征向量,要按列来看
vals, vecs = np.linalg.eig(C)

#重新排序,从大到小
#默认从小到大排列,这里取负了,就是从大到小排列,返回相应索引
vecs = vecs[:,np.argsort(-vals)]#特征向量按列取,这里就呼应上了
vals = vals[np.argsort(-vals)]

print(vals)
print(vecs)

#第一个特征值对应的特征向量
print(vals[0],vecs[:,0])
#第二个特征值对应的特征向量
print(vals[1],vecs[:,1])

#计算模长是否为1
print(np.linalg.norm(vecs[:,0]))
print(np.linalg.norm(vecs[:,1]))

 NumPy 从已有的数组创建数组https://www.runoob.com/numpy/numpy-array-from-existing-data.html

 第二段

这一大堆数字,不直观呐。能把结果可视化一下吗?

# 计算以下数据的协方差矩阵
import numpy as np
import matplotlib.pyplot as plt

# np.random.seed(0)#随机数种子
# data = np.random.uniform(1,10,(10,2))
# data[:,1:] = 0.5*data[:,0:1]+np.random.uniform(-2,2,(10,1))

#不用随机数了,这次用一个比较实际的例子,来测试PCA准不准
#假设这是一个扁扁的矩形
input=list()
input.append([100,100])
input.append([500,100])
input.append([100,200])
input.append([500,200])
print(input)

#从已有的数组创建数组
data=np.asarray(input)
print(data)

#去中心化
data_norm = data-data.mean(axis = 0)#axis = 0:压缩行,对各列求均值,返回 1* n 矩阵

X = data_norm[:,0]
Y = data_norm[:,1]

C=np.cov(data_norm,rowvar=False)## 此时列为变量计算方式 即X为列,Y也为列

#计算特征值和特征向量
#这个返回的特征向量,要按列来看
vals, vecs = np.linalg.eig(C)

#重新排序,从大到小
#默认从小到大排列,这里取负了,就是从大到小排列,返回相应索引
vecs = vecs[:,np.argsort(-vals)]#特征向量按列取,这里就呼应上了
vals = vals[np.argsort(-vals)]

print(vals)
print(vecs)

#第一个特征值对应的特征向量
print(vals[0],vecs[:,0])
#第二个特征值对应的特征向量
print(vals[1],vecs[:,1])

#计算模长是否为1
print(np.linalg.norm(vecs[:,0]))
print(np.linalg.norm(vecs[:,1]))


#用画图的方式,画出结果
#设置图大小
size = 600

plt.figure(1,(8,8))

plt.scatter(data[:,0],data[:,1],label='origin data')

i=0
ev = np.array([vecs[:,i]*-1,vecs[:,i]])*size
ev = (ev+data.mean(0))
plt.plot(ev[:,0],ev[:,1],label = 'eigen vector '+str(i+1))

i=1
ev = np.array([vecs[:,i]*-1,vecs[:,i]])*size
ev = (ev+data.mean(0))
plt.plot(ev[:,0],ev[:,1],label = 'eigen vector '+str(i+1))

#plt.plot(vecs[:,1]*-10,vecs[:,1]*10)

#画一下x轴y轴
plt.plot([-size,size],[0,0],c='black')
plt.plot([0,0],[-size,size],c='black')
plt.xlim(-size,size)
plt.ylim(-size,size)
plt.legend()
plt.show()

 

 相关链接

Matplotlib 教程https://www.runoob.com/matplotlib/matplotlib-tutorial.html中间还遇到了点问题:

就是这段没理解好:

print(vecs)

print(vecs[:,0]*-100)
print(vecs[:,0]*100)

plt.plot(vecs[:,0]*-100,vecs[:,0]*100)

 脑子里觉得应该是(-100,0)到(100,0)水平的,结果画出来是这样的:

——plot到底是横着看的还是竖着看的?

 

 又仔细看了下以后,发现都是竖着看的,前面看错了

要是能用动画做出来就好了,图形不断变,主成分轴不断求,不过那玩意不是刚需。暂时忽略。

后记

简单测试,,意思就是复杂点的情况还不知道怎么处理。

多少也算有一点东西出来了,虽然不是什么大的东西。作为一个小小白,已经很不错了。

基于MATLAB,运用PCA+SVM的特征脸方法人脸识别 概述: 阅读详情

相关推荐

主成分分析(PCA)方法步骤以及代码详解

主成分分析(PCA)方法步骤以及代码详解 前言 上一节我们了解到在构建神经网络模型,除了掌握如何搭建神经网络架构,了解参数具体含义,规避风险等方法。第一步是要对采用数据集的详细了解,无需接触任何神经网络代码,而是从彻底检查数据开始。这一步是非常关键的一步,往往我们在数据处理的某一个步骤会一定程度上的影响实验结果。本节将讲述常见的数据降维方法PCA,减少数据集的变量数量,同时保留尽可能多的信息。 1. 什么是主成分分析? ​ PCA(Principal Component Analysis) 是一种常见的

Shiraka的博客 2万+

PCA算法讨论

PCA算法

a1233219的博客 640

【机器学习】主成分分析法(PCA)

本文主要讲述了主成分分析法(PCA)的原理和应用。PCA通过选择最重要的特征,将高维数据映射到低维空间,同时保持数据间的关系,实现降维和去噪。通过具体的例子和图示解释了PCA的原理,并比较了两种降维方案,解释了为什么选择将数据映射到x轴上可以得到更好的分类效果。最后强调了在PCA之前需要对所有样本的均值进行归零处理。通过这篇文章,读者可以深入了解PCA的原理和应用,并掌握如何使用PCA进行数据降维和去噪,提高分类效果。

聚焦大数据、AI、数据库三大核心领域,分享 Flink/Spark 实时计算、数仓架构设计、AI 模型落地、数据库性能调优的实战干货,附可直接运行的源码与方案。提供企业技术内训、项目咨询与定制化服务,助力开发者与企业高效搞定数智技术难题。 2866

PCA的C语言代码

来自维基百科: C*********************** Contents **************************************** C* Principal Components Analysis: C, 638 lines. **************************** C* Sample input data set (final 36 li

boyhailong的专栏 7615

特征脸(Eigenface)理论基础-PCA(主成分分析法)

在之前的博客人脸识别经典算法一:特征脸方法(Eigenface)里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充。请将这两篇博文结合起来阅读。

笔记 4万+

Python 实现的综合评价系统数学建模详解(主成分分析法PCA)

主成分分析法作为一种经典的数据降维方法,具有原理简单、计算高效、可解释性强等优点,在数学建模中有着广泛的应用。通过本文的介绍,我们详细了解了主成分分析法的算法实现原理,包括数据标准化、协方差矩阵计算、特征值分解、主成分选择和数据投影等步骤。同时,结合具体的 Python 代码,我们展示了如何使用numpy和pandas库实现主成分分析法的完整流程。此外,我们还探讨了主成分分析法在数学建模中的适用范围,包括数据降维与简化模型、数据可视化、数据预处理与噪声去除以及综合评价与排名等方面。

heikediguoshinib的博客 1452

pca算法 c语言,降维算法一 : PCA (Principal Component Analysis)

PCA简介在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错...

weixin_33293858的博客 963

主成分分析法原理及其python实现

主成分分析法原理及其python实现

随便记点东西 2万+

PCA 学习

基础   假设X是一个m*n的矩阵,是由样本数据构成的矩阵。其中m表示样本的属性维数,n表示样本的个数。现在要对X进行线性变换变成另一个矩阵Y,使得Y的协方差矩阵为对角矩阵,这样的Y就认为是对原始矩阵X提取主成分后的矩阵,实际过程中只需取Y的前面主要的行即可。   X变换到Y的线性变换公式为:      X和Y的协方差计算方法为:         从下面的

u012809610的专栏 863

运用PCA(主成分分析法)进行人脸识别的MATLAB 代码实现

PCA(主成分分析算法)出现的比较早。PCA算法依赖于一个基本假设:一类图像具有某些相似的特征(如人脸),在整个图像空间中呈现出聚类性,因而形成一个子空间,即所谓特征子空间,PCA变换是最佳正交变换,利用变换基的线性组合可以描述、表达和逼近这一类图像,因此可以进行图像识别,PCA包含训练和识别两个阶段。训练阶段:1)计算平均脸2)计算差值脸3)构建协方差矩阵4)计算矩阵的特征值和特征向量5)将每幅...

u013146742的博客 2万+

深入理解Linux 内核追踪机制

Linux 存在众多 tracing tools,比如 ftrace、perf,他们可用于内核的调试、提高内核的可观测性。众多的工具也意味着繁杂的概念,诸如 tracepoint、trace events、kprobe、eBPF 等,甚至让人搞不清楚他们到底是干什么的。本文尝试理清这些概念。

youzhangjing_的博客 1730

主成分分析法(PCA)

主成分分析法(PCA) PCA的实质:就是在尽可能好地代表原始数据的前提下,通过线性变换,将高维样本数据投影到低维空间中。 主成分分析法的适用范围:主要用于高维数据的降维,不适合样本的分类。 1.1 理论推导 基本思想:代表样本的数据应该和所有的样本数据的距离最小。 推导过程: 1)“0维”,即样本数据映射到一个点上。寻找最佳数据点,设其为x0x_{0}x0​,则最佳点到样本数据的距离和为: D(...

weixin_45505744的博客 1728

股票分时数据获取-东方财富

获取下股票分时数据,分时均价下线,分时成交额等,用于量化t0交易条件还是很不错了的。

meiaoxue1234的博客 1万+

主成分分析法(PCA)及其python实现

主成分分析法(Principal Component Analysis,PCA)是一种用于把高维数据降成低维,使分析变得更加简便的分析方法。本文给出了PCA的推导过程以及python实现,多为学习后的个人理解,如有错误还请指出。...............

Castria的博客 4万+

千兆以太网 PCB 设计实战:4层板 100Ω 差分对布线,EMI 降低 6dB 实测

本文详细解析了千兆以太网 PCB 设计中的关键技术与实战经验,重点介绍了4层板上100Ω差分对的优化布线方法,通过实测数据展示了EMI降低6dB的有效方案。内容涵盖层叠设计、阻抗计算、布线技巧及EMI抑制措施,为硬件工程师提供了一套完整的高速电路设计解决方案。

weixin_29175469的博客 424

1.Fay-UE5数字人工程导入(UE数字人系统教程)

ue5数字人系列教程(含源文件工程)

1万+

权重确定方法四:主成分分析法确定权重(PCA)

我想在列车里和你相爱 阳光流淌 都漫过我们的灵魂尽头 然后看着人间 安静的盛开在一扇窗里 目录 1.原理介绍 2.步骤详解 2.1 确定指标在各主成分线性组合中的系数 2.2 利用主成分的方差贡献率确定综合得分模型系数 2.3 指标权重归一化 3. 案例分析 3.1 数据获取 3.2 确定指标在各主成分线性组合中的系数 3.3 利用主成分的方差贡献率确定综合得分模型系数 3.4 指标权重归一化 4. 完整代码(Java) 1.原理介绍 在阅读本...

weixin_53972936的博客 2万+

Axure RP9汉化+授权全攻略:从下载到激活一步到位(附最新授权码)

本文提供Axure RP9从下载安装到界面汉化的完整指南,帮助设计师和产品经理快速上手这款原型设计工具。详细讲解了如何安全获取软件、执行汉化操作、理解核心界面布局,并介绍了创建交互原型和生成HTML文件的基础步骤,助力用户高效开展设计工作。

cuda7parallel的博客 1138

主成分分析法(PCA)具体讲述

主成分分析法(PCA)是一种强大的降维工具,通过将数据集转换为少数几个主要的、不相关的主成分,帮助我们从数据中提取最重要的信息,减少计算复杂度。因为PCA对数据的尺度敏感,特别是当数据中包含具有不同单位或量级的特征时,标准化可以确保每个特征对PCA结果的贡献是平等的。PCA的基本目的是将数据从原始的特征空间(高维空间)转换到一个新的特征空间(低维空间),新的特征空间由原始特征的线性组合构成。PCA的本质是寻找数据中的正交基,使得数据在这些基向量上的投影具有最大方差。个特征的数据集,协方差矩阵的大小是。

m0_57407372的博客 1万+

Nacos 2.3.2与PostgreSQL的Docker化部署实战

本文详细介绍了Nacos 2.3.2与PostgreSQL的Docker化部署实战,包括环境准备、数据库配置、镜像获取与导入、容器部署及常见问题排查。通过Docker容器化技术,结合PostgreSQL的稳定性和扩展性,为微服务架构提供高效的服务发现和配置管理解决方案。

k5l6m的博客 282

一步一步实现基于COMSOL的单模光纤波导仿真

一步一步实现基于COMSOL的单模光纤波导仿真,简单易懂,跟着博客就能实现

君莫笑lucky的博客 1万+

主成分分析法(PCA)及MATLAB实现

主成分分析法(PCA)及MATLAB程序实现

qq_54543084的博客 1万+

基于GEC6818开发板+Linux+Qt设计的智能养老院出入管理系统(195)

当前,传统的养老院出入管理模式普遍存在信息更新滞后、数据统计繁琐、实时监控能力不足等问题,难以满足现代养老机构对安全管理与服务质量提升的需求。本系统设计正是针对这些问题,通过集成先进的硬件设备如高性能GEC6818开发板以及RFID刷卡模块,结合稳定高效的嵌入式Linux操作系统和QT开发框架,构建一套功能齐全、操作直观、响应迅速的智能出入管理系统。 该系统能自动记录并实时显示老人的进出时间,方便管理人员及时了解每位老人的活动轨迹,同时具备强大的后台管理功能,支持管理员便捷地进行老人信息的增删改查操作。通

1069

PCA(主成分分析法)的Python代码实现(numpy,sklearn)

PCA(主成分分析法)的Python代码实现(numpy,sklearn)语言描述算法描述示例1 使用numpy一步一步按算法降维 2 直接使用sklearn中的PCA进行降维 语言描述 PCA设法将原来众多具有一定相关性的属性(比如p个属性),重新组合成一组相互无关的综合属性来代替原属性。通常数学上的处理就是将原来p个属性做线性组合,作为新的综合属性。 PCA 中的线性变换等价于坐标变换,变换的目的是使 n 个样本点在新坐标轴 y1y_1y1​ 上的离散程度(方差)最大,这样变量 y1

qq_52300431的博客 5万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

机器学习之PCA主成分分析法降维及测试

机器学习之PCA主成分分析法降维及测试

是十一月末的博客 2061

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 002 pyqt5内嵌OpenGL
下一篇: 主成分分析法(PCA方法)计算OBB包围盒
averagePerson
博客等级 码龄5年 381粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值