使用pca函数重构向量内外测试集

6视图(30天)
我工作在一个项目上有一组向量(图片),我生成一个向量的基础上(一组原则compoenet)从使用pca在MATLAB函数。我然后使用基向量试图重构向量内部测试集的图像外但非常接近内的向量集。
对于这个测试运行,我初始化一个nxc矩阵d n行向量,每个与c数量的组件(在这个例子中,n = 6和c = 40000)。
然后我减去每一列的均值的d d(我相信中心数据在零附近,或一些类似的逻辑原因关于规范数据我读过关于在做研究)。然后使用pca (d)产生主成分系数的多项式系数矩阵。
我试图重建矢量,重塑vec成一个列向量,vec收益率5系数多项式系数除以(coeffi 5组件)。然后我总结了产品组件和它们各自的原理生成的s manbetx 845系数,并重塑形象和vec的原始尺寸。
假设,如果我有正确的逻辑,我应该已经能够vec在很大程度上重建的准确性,特别是我包括一个向量(vec2)非常接近矢量。然而,当我使用部门之间的差异重建图像和矢量,并采取的标准差像素,我得到一个非常大量的差异形象有非常不同的模式表明图像是不相似的。
我的导师和我相当肯定,如果我们使用一组测试向量非常接近向量我们试图重建,我们应该能够这样做一定程度的准确性,但到目前为止,结果不甚理想,甚至接近我们想要的。因此,我想知道如果我接近问题是合理的或逻辑的方式,代码中的错误或我的推理可能存在,或者如果该方法本身并不适用于我们的目标是做什么(重建一个向量接近测试向量)。
std2 (vec. / vec2) = 0.0136 (vec和vec2非常类似的图像)
std2 (vec. / sum1) = 204.3604(重建图像和矢量非常不同,表明该方法没有正常工作)
如果需要,我可以给更具体的数字,或附加的区别重建图像和原始的样子。
y = 0.001:0.005:1;
z = 1:200;
vec = 5 * cos(炮*π* z ' * y);% 1形象,试图重建
vec2 = 5 * cos(.7499995 *π* z ' * y);%图2,非常类似于图1,添加到测试集
%生成测试向量生成的基础
v1 = 0 (200、200);
缺点= abs (rand () * 10);
u = 1: 200
v = 1:200
v1 (u, v) =缺点;
结束
结束
s = 0.001:0.005:1;
g = 1:200;
v2 =罪(rand() *π* g * s);
v3 = sin (rand() *π* g * s);
v4 = cos (rand() *π* g * s);
v5 = cos (rand() *π* g * s);
d = 0 (6 u * v);
d(1) =重塑(v1, u * v [1]);
d(2) =重塑(v2, u * v [1]);
d(3) =重塑(v3, u * v [1]);
d(4) =重塑(v4, u * v [1]);
:d(5日)=重塑(v5, [1 u * v]);
:d(6日)=重塑(vec2 [1 u * v]);在测试集%包括极其类似的形象
元素个数= 6;
d = d -意味着(d);
[多项式系数,分数,~,解释]= pca (d);
一个=多项式系数;
b1 =重塑(vec (u v * 1));
%生成系数
c1 = \ b1;
%重建vec使用生成的系数和各自的产物
%基向量
sum1 = 0 (u * v, 1);
我= 1:numel-1
sum1 = sum1 + c1(我:)*(:,我);
结束
sum1 =重塑(sum1 [u, v]);
信号= sum1. /矢量;
sd2 = std2(信号);

答案(1)

威廉•罗斯
威廉•罗斯 2022年8月15日
@nms09 ,
的代码
v1 = 0 (200、200);
缺点= abs (rand () * 10);
u = 1: 200
v = 1:200
v1 (u, v) =缺点;
结束
结束
相当于
v1 = 1 (200200) * 10 * rand ();
因为兰德总是U(0, 1),所以abs (rand())是不必要的,因为每个元素的嵌套循环分配相同的值。
图像v1将白色的方形90%的时间。其他10%的情况下,这将是一个广场,是一个统一的灰色阴影。这是因为当Matlab呈现一个浮点数组作为一个图像,它假定是灰度值的值在0和1之间。值< = 0的情节一样黑。值> = 1块白色。价值10 * rand()将转换为白色,90%的时间。
图像v2-v5由1和1之间的数字各不相同。所有负面价值的像素将呈现为黑色,如上所述。PCA经营的正面和负面的价值观,但所有负值是黑色的图片。因此有一种强烈的非线性数字数组和之间的关系呈现的形象。这减少了PCA在复制图像的有效性。由于这些原因,我建议生成图像与基础值在0和1之间变化。例如,cos (x)替换为(1 + cos (x) / 2;sin (x)替换为(1 + sin (x)) / 2。
像素值矢量和vec2变化从-0.5 + 0.5。这是故意的吗?我会选择变异从0到1,显示完整的动态范围从黑到纯白。这也有好处,vec的范围和vec2将匹配的范围基础图像,v1-v5,改变从黑到纯白。
因为负数是呈现为黑色,我不建议你减去所有列的平均值。我获得好结果与主成分分析应用到图像时我没有减去均值。看到 在这里,例如
最好把图片处理。所以我添加了代码来显示一些图片。图片由原来的代码如下所示。这些图像的外观是影响显示的大小。波纹模式的出现和消失的一个调整图像大小。
(下图)在这里图片修改生成的代码。这些图像是不同于以前的,因为(1)每次运行的随机数是不同的,和(2)v1,原全白在90%的情况下,现在是一个中间的灰色,和(3)我已经取代了sin (x)与(1 + sin (x)) / 2,等等,v2-v5,(4)我已经取代了(0.5 * sin (x)) (0.5 + 0.5 * sin (x))矢量和vec2。变化(3)和(4)导致更少的黑色像素,并消除广泛的全黑的地区。
脚本的末尾,您计算sum1,这应该是一个重建矢量,利用主成分。下图显示矢量和sum1由最初发布代码生成的。
下面的图显示了矢量和sum1修改生成的代码。vec不同于运行运行,由于使用的随机数来生成它。
一种比较vec的相似性和sum1每个图像转换为一个列向量,然后计算皮尔逊相关的列向量。
> > disp (corr(重塑(sum1[1] 40000年),重塑(矢量,[1]40000年)))
0.9959
这里是五分的相关性的原始代码。
0.6986 0.7188 0.7145 0.7014 0.8616
这里有相关性的五分修改代码。
0.9941 0.7252 0.9533 0.5947 0.9959
这是一个小样本的大小。似乎修改后的代码产生相关性较高的旧高和旧低。

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!