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)
t-SNE は、相対的な類似度のみに基づいて点のクラスターを作成します。このビューでは、クラスターが十分に分離されているとは言えません。
パープレキシティを増加
データ クラスター間の分離をより良好にするため、Perplexity パラメーターを 300 に設定してみます。
rng default % for reproducibility Y = tsne(X,Algorithm="barneshut",Perplexity=300); figure gscatter(Y(:,1),Y(:,2),activity,clr)
現在の設定では、ほとんどのクラスターがより適切に分離され構造化されています。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)
走ると踊るを除いて、クラスターは十分に分離されているように見えます。3 次元プロットを回転すると、2 次元よりも 3 次元の方が走ると踊るを区別しやすいことがわかります。