相关疑难解决方法(0)

MATLAB的内存不足但不应该

我正在尝试使用PCA对我的数据进行princomp(x)标准化.

数据是<16 x 1036800 double>.这运行我们的内存,除了这是一台新计算机,计算机拥有24GB的RAM用于数据挖掘,这是太过预期.MATLAB甚至列出了内存检查中可用的24GB.

MATLAB在执行PCA时实际上是否内存不足,还是MATLAB没有使用RAM来充分发挥它的潜力?任何信息或想法都会有所帮助.(我可能需要增加虚拟内存,但假设24GB已经足够了.)

memory matlab linear-algebra out-of-memory pca

9
推荐指数
1
解决办法
7945
查看次数

MATLAB eig有时会返回反转的符号

我正在尝试编写一个获取A任意大小矩阵的程序,并且SVD将其分解:

A = U * S * V'
Run Code Online (Sandbox Code Playgroud)

A用户输入的矩阵在哪里,U正交矩阵由特征值的特征向量组成A * A',S是奇异值的对角矩阵,并且V是特征向量的正交矩阵A' * A.

问题是:MATLAB函数eig有时会返回错误的特征向量.

这是我的代码:

function [U,S,V]=badsvd(A)
W=A*A';
[U,S]=eig(W);
max=0;
for i=1:size(W,1) %%sort
    for j=i:size(W,1)
        if(S(j,j)>max)
            max=S(j,j);
            temp_index=j;
        end
    end
    max=0;
    temp=S(temp_index,temp_index);
    S(temp_index,temp_index)=S(i,i);
    S(i,i)=temp;
    temp=U(:,temp_index);
    U(:,temp_index)=U(:,i);
    U(:,i)=temp;
end
W=A'*A;
[V,s]=eig(W);
max=0;
for i=1:size(W,1) %%sort
    for j=i:size(W,1)
        if(s(j,j)>max)
            max=s(j,j);
            temp_index=j;
        end
    end
    max=0;
    temp=s(temp_index,temp_index);
    s(temp_index,temp_index)=s(i,i);
    s(i,i)=temp;
    temp=V(:,temp_index);
    V(:,temp_index)=V(:,i);
    V(:,i)=temp;
end
s=sqrt(s);
end
Run Code Online (Sandbox Code Playgroud)

我的代码返回正确的s矩阵,也"几乎"正确U …

matlab matrix linear-algebra svd eigenvector

5
推荐指数
1
解决办法
1万
查看次数

Matlab问题 - 主成分分析

我有一组100个观测值,每个观测值有45个特征.并且这些观察中的每一个都附有标签,我想基于这45个特征来预测.所以它是一个尺寸为45 x 100的输入矩阵和一个尺寸为1 x 100
的目标矩阵. 问题是我想知道这45个特征中有多少与我的数据集相关,基本上是主成分分析,我明白我可以用Matlab函数做到这一点processpca.

你能告诉我怎么办?假设输入矩阵x有45行和100列,并且y是具有100个元素的向量.

matlab

3
推荐指数
1
解决办法
3919
查看次数

主成分使用Matlab中的不同函数计算

我试图理解Matlab中的主成分分析,

似乎至少有3种不同的功能可以做到这一点.

我在下面的代码中有一些问题:

  1. x是否正确使用一个特征向量(对应于最大特征值的特征向量)创建近似值?我认同??

  2. 为什么PCV哪些都是(x'x)表示不同的载荷?列顺序是相反的,因为eig不会首先排序具有最大值的特征值,但为什么它们彼此为负?

  3. 为什么这些eig值不是与特征向量一致的,与第一列中最大的特征值相对应?

  4. 使用下面的代码,我回到输入矩阵x使用时svdeig,但是从princomp的结果似乎是完全不同的?我需要做些什么来使princomp与其他两个函数相匹配?

码:

x=[1 2;3 4;5 6;7 8 ]

econFlag=0;

[U,sigma,V] = svd(x,econFlag);%[U,sigma,coeff] = svd(z,econFlag);

U1=U(:,1);
V1=V(:,1);
sigma_partial=sigma(1,1);

score1=U*sigma;
test1=score1*V';

score_partial=U1*sigma_partial;
test1_partial=score_partial*V1';



[PC, D] = eig(x'*x)

 score2=x*PC;
test2=score2*PC';

PC1=PC(:,2);
score2_partial=x*PC1;
 test2_partial=score2_partial*PC1';

[o1 o2 o3]=princomp(x);
Run Code Online (Sandbox Code Playgroud)

matlab svd eigenvector pca

3
推荐指数
1
解决办法
2772
查看次数

标签 统计

matlab ×4

eigenvector ×2

linear-algebra ×2

pca ×2

svd ×2

matrix ×1

memory ×1

out-of-memory ×1