I have measurements of 5 devices at two different points of time. A measurement basically consists of an array of ones and zeros corresponding to a bit value at the corresponding location:
whos measurement1_dev1_time1
Name Size Bytes Class Attributes
measurement1_dev1_time1 4096x8 32768 logical
I assume that for a specific device the changes between time 1 and 2 of the measurements are unique. However, since I am dealing with 32768 bits at different locations, it is quite hard to visualize if there is some kind of dependency.
As every bit at location x
can be regarded as one dimension of an observation I thought to use PCA to reduce the number of dimensions.
Thus, for every of the 5 devices:
- I randomly sample
n
measurements at pointt1
andt2
seperatly - I prepare an array as input for
pca()
withm
*n columns (m
< 32768; its a subset of all the observed bits, as the original data might be too big for pca) and 4 rows (one row for each device). - On this array
A
I calculate the pca: ``[coeff score latent] = pca(zscore(A))``` - Then I try to visualize it using
biplot
:biplot(coeff(:,1:2), 'score', score(:,1:2))
However, this gives me really strange results. Maybe PCA is not the right approach for this problem? I also modified the input data to do the PCA not on the logical bit array itself. Instead, I created a vector, which holds the indices where there is a '1' in the original measurement array. Also this produces strange results.
As I am completely new to PCA I want to ask you if you either see a flaw in the process or if PCA is just not the right approach for my goal and I better look for other dimension reduction approaches or clustering algorithms.
Can this 'some kind of dependency' be just pairwise correlation of your data points? Or what do you want to find out?
Do you get 'expected results' if you do:
Can there be a problem of data type? Try feeding
double(data)
. (Please add proper code into your example)if you look for dimension reduction, you can also think about ICA.
UPD: can you probe it with
xor
? As you cannot doxor
on rows or columns, you can trickall(x, dimension)