首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑数组的降维

逻辑数组的降维
EN

Stack Overflow用户
提问于 2014-11-13 15:21:52
回答 1查看 112关注 0票数 1

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

代码语言:javascript
复制
whos measurement1_dev1_time1

Name                         Size               Bytes  Class      Attributes

measurement1_dev1_time1      4096x8             32768  logical

我假设对于一个特定的设备,测量的时间1和2之间的变化是唯一的。但是,由于我在不同的位置处理32768位数据,所以如果存在某种依赖,就很难想象。

由于位置上的每一点x都可以看作是观察的一个维度,所以我认为使用主成分分析来减少维数。

因此,对于这5种装置中的每一种:

  1. 我在t1点和t2点随机抽取了t1测量值。
  2. 我准备一个数组作为pca()的输入,其中包含m*n列(m< 32768;它是所有观察到的比特的子集,因为原始数据对于pca来说可能太大了)和4行(每个设备有一行)。
  3. 在这个数组A上,我计算了主成分分析:coeff得分潜在=pca( score (A))`
  4. 然后,我尝试使用biplotbiplot(coeff(:,1:2), 'score', score(:,1:2))可视化它。

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

由于我对PCA完全陌生,所以我想问您,您是否看到了过程中的一个缺陷,或者PCA不是我的目标的正确方法,我最好去寻找其他降维方法或聚类算法。

EN

回答 1

Stack Overflow用户

发布于 2014-11-15 14:44:08

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

如果你这样做了,你会得到“预期的结果”吗?

代码语言:javascript
复制
meas_norm = 2*measurement1_dev1_time1 - 1;

CovarianceMatrix = meas_norm' * meas_norm;

figure
pcolor(CovarianceMatrix )

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

如果您寻找维度约简,也可以考虑ICA

UPD:你能用xor探测它吗?由于不能对行或列执行xor,所以可以欺骗all(x, dimension)

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26912336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档