我在两个不同的时间点测量了5个设备。度量基本上由对应于相应位置的位值的1和0组成的数组组成:
whos measurement1_dev1_time1
Name Size Bytes Class Attributes
measurement1_dev1_time1 4096x8 32768 logical我假设对于一个特定的设备,测量的时间1和2之间的变化是唯一的。但是,由于我在不同的位置处理32768位数据,所以如果存在某种依赖,就很难想象。
由于位置上的每一点x都可以看作是观察的一个维度,所以我认为使用主成分分析来减少维数。
因此,对于这5种装置中的每一种:
t1点和t2点随机抽取了t1测量值。pca()的输入,其中包含m*n列(m< 32768;它是所有观察到的比特的子集,因为原始数据对于pca来说可能太大了)和4行(每个设备有一行)。A上,我计算了主成分分析:coeff得分潜在=pca( score (A))`biplot:biplot(coeff(:,1:2), 'score', score(:,1:2))可视化它。然而,这给了我非常奇怪的结果。也许PCA不是解决这个问题的正确方法?我还修改了输入数据,以完成PCA,而不是对逻辑位数组本身。相反,我创建了一个向量,它保存原始测量数组中存在“1”的索引。这也会产生奇怪的结果。
由于我对PCA完全陌生,所以我想问您,您是否看到了过程中的一个缺陷,或者PCA不是我的目标的正确方法,我最好去寻找其他降维方法或聚类算法。
发布于 2014-11-15 14:44:08
这种“某种依赖”是否只是数据点的两两关联?或者你想知道什么?
如果你这样做了,你会得到“预期的结果”吗?
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)https://stackoverflow.com/questions/26912336
复制相似问题