Main Content

t-SNE の使用による高次元データの可視化

この例では、さまざまな動作中にスマートフォンから収集した加速度データで構成される humanactivity データを可視化する方法を示します。tsne は、データの次元数を元の 60 から 2 または 3 に削減します。tsne は、類似した特性をもつ点のグループ化を有効にすることを目的とした非線形変換を作成します。tsne の結果で、60 次元データ点がグループに明確に分離されるのが理想的です。

データの読み込みと確認

この例を実行すると提供される humanactivity データを読み込みます。

load humanactivity

データの説明を表示します。

Description
Description = 29×1 string
    "                        === Human Activity Data ===                        "
    "                                                                           "
    " The humanactivity data set contains 24,075 observations of five different "
    " physical human activities: Sitting, Standing, Walking, Running, and       "
    " Dancing. Each observation has 60 features extracted from acceleration     "
    " data measured by smartphone accelerometer sensors. The data set contains  "
    " the following variables:                                                  "
    "                                                                           "
    " * actid - Response vector containing the activity IDs in integers: 1, 2, "
    " 3, 4, and 5 representing Sitting, Standing, Walking, Running, and         "
    " Dancing, respectively                                                     "
    " * actnames - Activity names corresponding to the integer activity IDs    "
    " * feat - Feature matrix of 60 features for 24,075 observations           "
    " * featlabels - Labels of the 60 features                                 "
    "                                                                           "
    " The Sensor HAR (human activity recognition) App [1] was used to create    "
    " the humanactivity data set. When measuring the raw acceleration data with "
    " this app, a person placed a smartphone in a pocket so that the smartphone "
    " was upside down and the screen faced toward the person. The software then "
    " calibrated the measured raw data accordingly and extracted the 60         "
    " features from the calibrated data. For details about the calibration and  "
    " feature extraction, see [2] and [3], respectively.                        "
    "                                                                           "
    " [1] El Helou, A. Sensor HAR recognition App. MathWorks File Exchange      "
    " http://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app "
    " [2] STMicroelectronics, AN4508 Application note. “Parameters and          "
    " calibration of a low-g 3-axis accelerometer.” 2014.                       "
    " [3] El Helou, A. Sensor Data Analytics. MathWorks File Exchange           "
    " https://www.mathworks.com/matlabcentral/fileexchange/54139-sensor-data-analytics--french-webinar-code- "

データ セットは動作タイプごとに整理されています。データの無作為なセットをより適切に表現するために、行をシャッフルします。

n = numel(actid); % Number of data points
rng default % For reproducibility
idx = randsample(n,n); % Shuffle
X = feat(idx,:); % Shuffled data
actid = actid(idx); % Shuffled labels

動作を actid 内のラベルに関連付けます。

activities = ["Sitting";"Standing";"Walking";"Running";"Dancing"];
activity = activities(actid);

データの次元数を 2 に削減

t-SNE を使用して、データ クラスターの 2 次元類似物を取得します。この比較的大きいデータ セットで時間を節約するため、t-SNE アルゴリズムの Barnes-Hut バリアントを使用します。

rng default % For reproducibility
Y = tsne(X,Algorithm="barneshut");

正しいラベルで色を付けて、結果を表示します。

figure
numGroups = length(unique(actid));
clr = hsv(numGroups);
gscatter(Y(:,1),Y(:,2),activity,clr)

Figure contains an axes object. The axes object contains 5 objects of type line. One or more of the lines displays its values using only markers These objects represent Running, Walking, Dancing, Sitting, Standing.

t-SNE は、相対的な類似度のみに基づいて点のクラスターを作成します。このビューでは、クラスターが十分に分離されているとは言えません。

パープレキシティを増加

データ クラスター間の分離をより良好にするため、Perplexity パラメーターを 300 に設定してみます。

rng default % for reproducibility
Y = tsne(X,Algorithm="barneshut",Perplexity=300);
figure
gscatter(Y(:,1),Y(:,2),activity,clr)

Figure contains an axes object. The axes object contains 5 objects of type line. One or more of the lines displays its values using only markers These objects represent Running, Walking, Dancing, Sitting, Standing.

現在の設定では、ほとんどのクラスターがより適切に分離され構造化されています。sitting クラスターはいくつかの区分に分かれていますが、これらの区分は適切に定義されています。standing クラスターは 2 つの円状に近い区分で、他のクラスターのデータ (色) がわずかに混ざっています。walking クラスターは 1 つの区分で、他の動作の色が少し混ざっています。dancing データと running データは相互に分離されていませんが、他のデータからはほぼ分離されています。分離されていないということは、走ると踊るが簡単には区別できないことを意味します。この結果は当然とも言えるでしょう。

データの次元数を 3 に削減

t-SNE は、データの次元数を 3 に削減することもできます。tsne'NumDimensions' 引数を 3 に設定します。

rng default % for fair comparison
Y3 = tsne(X,Algorithm="barneshut",Perplexity=300,NumDimensions=3);
figure
scatter3(Y3(:,1),Y3(:,2),Y3(:,3),15,clr(actid,:),'filled');
view(61,51)

Figure contains an axes object. The axes object contains an object of type scatter.

走ると踊るを除いて、クラスターは十分に分離されているように見えます。3 次元プロットを回転すると、2 次元よりも 3 次元の方が走ると踊るを区別しやすいことがわかります。

関連する例

詳細