逻辑阵列的尺寸减小

时间:2014-11-13 15:21:53

标签: matlab pca dimension-reduction

我在两个不同的时间点测量了5个设备。测量基本上由一个1和0的数组组成,对应于相应位置的位值:

whos measurement1_dev1_time1

Name                         Size               Bytes  Class      Attributes

measurement1_dev1_time1      4096x8             32768  logical

我认为对于特定设备,测量时间1和2之间的变化是唯一的。但是,由于我在不同位置处理32768位,因此很难想象是否存在某种依赖性。

由于位置x的每一位都可视为观察的一个维度,我认为使用PCA来减少维数。

因此,对于5个设备中的每一个:

  1. 我在点nt1分别随机抽样t2
  2. 我准备一个数组作为pca()的输入m * n列(m< 32768;它是所有观察位的子集,因为原始数据可能也是pca)和4行(每个设备一行)。
  3. 在这个数组A上我计算了pca:``[coeff score latent] = pca(zscore(A))````
  4. 然后我尝试使用biplotbiplot(coeff(:,1:2), 'score', score(:,1:2))
  5. 对其进行可视化

    但是,这给了我很奇怪的结果。也许PCA不是解决这个问题的正确方法?我还修改了输入数据以进行PCA而不是逻辑位数组本身。相反,我创建了一个向量,它保存原始测量数组中存在“1”的索引。这也会产生奇怪的结果。

    由于我对PCA完全陌生,我想问你是否要么看到这个过程中的缺陷,或者PCA是不是我的目标的正确方法,我最好寻找其他降维方法或聚类算法。< / p>

1 个答案:

答案 0 :(得分:1)

这种“某种依赖性”是否只是数据点的成对关联?或者你想知道什么?

如果你这样做,你会得到'预期结果':

meas_norm = 2*measurement1_dev1_time1 - 1;

CovarianceMatrix = meas_norm' * meas_norm;

figure
pcolor(CovarianceMatrix )

数据类型有问题吗?尝试喂养double(data)。 (请在您的示例中添加适当的代码)

如果您要查看降维,您还可以考虑ICA


UPD: 你可以用xor探测它吗?由于您无法在行或列上执行xor,因此您可以欺骗all(x, dimension)

example = imread('cameraman.tif')>128;

meas_points = numel(example);
num_sensors = 4;

%// simulate data for t1
meas_before = repmat(example(:), 1, num_sensors);
flickering_before = (rand(meas_points, num_sensors)<0.001);
meas_before(flickering_before) = ~meas_before(flickering_before);

%// simulate position of changing pixels, let's say 8%
true_change = (rand(num_sensors,1)<0.08);

%// simulate data for t2    
meas_after = repmat(example(:), 1, num_sensors);
meas_after(true_change) = ~meas_after(true_chage);
flickering_after = (rand(meas_points, num_sensors)<0.001);
meas_after(flickering_after) = ~meas_after(flickering_after);

stable_points_after = all(meas_after, 2) | all(~meas_after, 2);
stable_point_fraction = sum(stable_points_after)./ meas_points;

%// similarly for the states before (i.e. t1)
stable_points_before = all(meas_before, 2) | all(~meas_before, 2);   

%// now see which change coherently
stable_chage = meas_after(stable_points_after, 1) & meas_before(stable_points_before, 1)