1

我在两个不同的时间点测量了 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. 我随机抽样n测量点t1t2分开
  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))

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

由于我对 PCA 完全陌生,我想问您是否发现过程中存在缺陷,或者 PCA 是否不是我目标的正确方法,我最好寻找其他降维方法或聚类算法。

4

1 回答 1

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)
于 2014-11-15T14:44:08.217 回答