1

2 つの異なる時点で 5 つのデバイスを測定しました。測定値は基本的に、対応する位置のビット値に対応する 1 と 0 の配列で構成されます。

whos measurement1_dev1_time1

Name                         Size               Bytes  Class      Attributes

measurement1_dev1_time1      4096x8             32768  logical

特定のデバイスの場合、測定の時間 1 と時間 2 の間の変化は一意であると想定しています。ただし、32768 ビットをさまざまな場所で扱っているため、何らかの依存関係があるかどうかを視覚化するのは非常に困難です。

ロケーションのすべてのビットxは観測の 1 つの次元と見なすことができるため、PCA を使用して次元数を減らすことを考えました。

したがって、5 つのデバイスごとに次のようになります。

  1. n測定値をポイントでt1ランダムにサンプリングし、t2個別にサンプリングします
  2. *n 列 ( < 32768; 元のデータが pca には大きすぎる可能性があるため、観測されたすべてのビットのサブセット) と 4 行 (デバイスごとに 1 行) の入力として配列を準備しpca()ます。mm
  3. この配列Aで pca を計算します: ``[係数スコア潜在] = pca(zscore(A))```
  4. 次に、次を使用して視覚化しようとしbiplotます。biplot(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 に答える