ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

tsne

t 分布型確率的近傍埋め込み

説明

Y = tsne(X) は、X の高次元の行の 2 次元埋め込みの行列を返します。

Y = tsne(X,Name,Value) は、1 つ以上の名前と値のペアの引数によって指定されたオプションを使用して、埋め込みを修正します。

[Y,loss] = tsne(___) は、任意の入力引数について、データ X とその埋め込み Y をモデル化する同時分布の間のカルバック・ライブラー ダイバージェンスも返します。

すべて折りたたむ

フィッシャーのアヤメのデータセットには、アヤメの 4 次元測定値および対応する種への分類が格納されています。tsne を使用して次元を削減することにより、このデータを可視化します。

load fisheriris
rng default % for reproducibility
Y = tsne(meas);
gscatter(Y(:,1),Y(:,2),species)

各種の距離計量を使用して、フィッシャーのアヤメのデータにおける種の分離をより良好にします。

load fisheriris

rng('default') % for reproducibility
Y = tsne(meas,'Algorithm','exact','Distance','mahalanobis');
subplot(2,2,1)
gscatter(Y(:,1),Y(:,2),species)
title('Mahalanobis')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','cosine');
subplot(2,2,2)
gscatter(Y(:,1),Y(:,2),species)
title('Cosine')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','chebychev');
subplot(2,2,3)
gscatter(Y(:,1),Y(:,2),species)
title('Chebychev')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','euclidean');
subplot(2,2,4)
gscatter(Y(:,1),Y(:,2),species)
title('Euclidean')

この場合、コサイン、チェビシェフおよびユークリッド距離計量でクラスターが適切に分離されています。しかし、マハラノビス距離計量では適切に分離されません。

tsne は、NaN エントリが含まれている入力データ行を削除します。したがって、プロットを行う前に、このような行を分類データから削除しなければなりません。

たとえば、フィッシャーのアヤメのデータでいくつかのランダムなエントリを NaN に変更します。

load fisheriris
rng default % for reproducibility
meas(rand(size(meas)) < 0.05) = NaN;

tsne を使用して、4 次元データを 2 次元に埋め込みます。

Y = tsne(meas,'Algorithm','exact');
Warning: Rows with NaN missing values in X or 'InitialY' values are removed.

埋め込みから除去された行数を調べます。

length(species)-length(Y)
ans = 22

NaN 値が含まれていない meas の行を特定することにより、結果のプロットを準備します。

goodrows = not(any(isnan(meas),2));

NaN 値が含まれていない meas の行に対応する species の行のみを使用して、結果をプロットします。

gscatter(Y(:,1),Y(:,2),species(goodrows))

フィッシャーのアヤメのデータについて 2 次元と 3 次元の両方の埋め込みを求め、各埋め込みの損失を比較します。3 次元の埋め込みの方が、元のデータに一致する自由度が大きいので、損失が小さくなると考えられます。

load fisheriris
rng default % for reproducibility
[Y,loss] = tsne(meas,'Algorithm','exact');
rng default % for fair comparison
[Y2,loss2] = tsne(meas,'Algorithm','exact','NumDimensions',3);
fprintf('2-D embedding has loss %g, and 3-D embedding has loss %g.\n',loss,loss2)
2-D embedding has loss 0.122669, and 3-D embedding has loss 0.0985112.

予想どおり、3 次元の埋め込みの方が損失が小さくなっています。

埋め込みを表示します。RGB カラー [1 0 0][0 1 0] および [0 0 1] を使用します。

3 次元プロットに categorical コマンドを使用して種を数値に変換してから、次のように関数 sparse を使用して数値を RGB カラーに変換します。v が正の整数 1、2 または 3 から成るベクトルで種のデータに対応する場合、以下のコマンド

sparse(1:numel(v),v,ones(size(v)))

は、行が種の RGB カラーであるスパース行列になります。

gscatter(Y(:,1),Y(:,2),species,eye(3))
title('2-D Embedding')

figure
v = double(categorical(species));
c = full(sparse(1:numel(v),v,ones(size(v)),numel(v),3));
scatter3(Y2(:,1),Y2(:,2),Y2(:,3),15,c,'filled')
title('3-D Embedding')
view(-50,8)

入力引数

すべて折りたたむ

データ点。nm 列の行列を指定します。各行は 1 つの m 次元の点です。

tsne は、埋め込みを作成する前に、NaN 値が含まれている行を X から削除します。NaN 入力データと結果のプロットを参照してください。

データ型: single | double

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: Y = tsne(X,'Algorithm','Exact','NumPCAComponents',50)

アルゴリズムの制御

すべて折りたたむ

tsne アルゴリズム。'barneshut' または 'exact' を指定します。'exact' アルゴリズムは、元の空間と埋め込まれた空間の間の分布のカルバック・ライブラー ダイバージェンスを最適化します。'barneshut' アルゴリズムは、データの行数が多い場合に近似最適化をより高速に実行し、メモリ使用量を削減します。

メモ

'barneshut' アルゴリズムの場合、tsneknnsearch を使用して最近傍を求めます。

例: 'exact'

距離計量。次のいずれかを指定します。距離計量の定義については、pdist を参照してください。

  • 'euclidean' — ユークリッド距離。

  • 'seuclidean' — 標準化されたユークリッド距離。X の行とクエリ行列の行の間の各座標差は、S = nanstd(X) から算出される標準偏差の対応する要素で除算することによりスケーリングされます。

  • 'cityblock' — 市街地距離。

  • 'chebychev' — チェビシェフ距離。これは最大座標差です。

  • 'minkowski' — 指数 2 のミンコフスキー距離。これはユークリッド距離と同じです。

  • 'mahalanobis' — 正定共分散行列 nancov(X) を使用して計算されたマハラノビス距離。

  • 'cosine' — 1 から、ベクトルとして扱われる観測間の夾角の余弦を引きます。

  • 'correlation' — 1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。

  • 'spearman' — 1 から、一連の値として扱われる観測間の標本スピアマン順位相関係数を引きます。

  • 'hamming' — ハミング距離。異なる座標の比率です。

  • 'jaccard' — 1 からジャカード係数 (異なる非ゼロ座標の比率) を引きます。

  • カスタム距離関数 — @ を使用して指定された距離関数 (@distfun など)。詳細は、詳細を参照してください。

どの場合も、tsne はペアワイズ距離の二乗を使用して X の同時分布におけるガウス カーネルを計算します。

例: 'mahalanobis'

データ内の自然なクラスターのサイズ。1 以上のスカラー値を指定します。

強調が大きくなると、tsne が学習する Y の結合確率が大きくなり、Y のクラスター間に比較的大きい空間が作成されます。tsne は、最初の 99 回の最適化反復で強調を使用します。

最適化の初期段階でカルバック・ライブラー ダイバージェンスの値が増加する場合は、強調を小さくしてください。tsne の設定を参照してください。

例: 10

データ型: single | double

出力 Y の次元。正の整数を指定します。通常は、NumDimensions2 または 3 に設定します。

例: 3

データ型: single | double

PCA の次元削減。非負の整数を指定します。tsne は、高次元データを埋め込む前に、関数 pca を使用してデータの次元を NumPCAComponents に削減します。NumPCAComponents0 の場合、tsne は PCA を使用しません。

例: 50

データ型: single | double

各点の局所的近傍の有効数。正のスカラーを指定します。t-SNE アルゴリズムを参照してください。

パープレキシティが大きくなると、tsne はより多くの点を最近傍として使用します。データセットが大きい場合は、Perplexity の値を大きくします。一般的な Perplexity の値の範囲は、550 です。Barnes-Hut アルゴリズムでは、tsne は最近傍の個数として min(3*Perplexity,N-1) を使用します。tsne の設定を参照してください。

例: 10

データ型: single | double

入力データの正規化。false または true を指定します。true の場合、tsne は標準偏差で列を除算することにより X のセンタリングとスケーリングを行います。

スケールが異なる特徴量が X に含まれている場合は、'Standardize'true に設定します。これは、学習プロセスは最近傍を基本とすることから、スケールの大きい特徴量がスケールの小さい特徴量の寄与を無効化する可能性があるためです。

例: true

データ型: logical

最適化の制御

すべて折りたたむ

初期の埋め込み点。nNumDimensions 列の実数行列を指定します。nX の行数です。tsne の最適化アルゴリズムでは、これらの点を初期値として使用します。

データ型: single | double

最適化プロセスの学習率。正のスカラーを指定します。通常は、1001000 の値を設定します。

LearnRate が小さすぎる場合、適切ではない局所的最小値に tsne が収束する可能性があります。LearnRate が大きすぎる場合、最適化の初期段階でカルバック・ライブラー ダイバージェンスが減少するのではなく増加する可能性があります。tsne の設定を参照してください。

例: 1000

データ型: single | double

反復表示の頻度。正の整数を指定します。名前と値のペア Verbose0 ではない場合、tsne は反復が NumPrint 回行われるたびに反復表示を返します。名前と値のペア Options に空ではない 'OutputFcn' エントリが含まれている場合、反復が NumPrint 回行われるたびに出力関数が実行されます。

例: 20

データ型: single | double

最適化オプション。'MaxIter''OutputFcn' および 'TolFun' というフィールドが含まれている構造体を指定します。statset または struct を使用して、'Options' を作成します。

  • 'MaxIter' — 最適化反復の最大回数を指定する正の整数。既定の設定: 1000

  • 'OutputFcn'NumPrint 回の最適化反復ごとに呼び出す関数を 1 つ以上指定する関数ハンドルまたはその cell 配列。構文の詳細は、t-SNE の出力関数 を参照してください。既定の設定: []

  • 'TolFun' — 最適化の停止条件。カルバック・ライブラー ダイバージェンスの勾配のノルムが 'TolFun' より小さくなると、最適化が終了します。既定の設定: 1e-10

例: options = statset('MaxIter',500)

データ型: 構造体

Barnes-Hut のトレードオフ パラメーター。0 ~ 1 のスカラーを指定します。値を大きくすると最適化が高速になりますが、精度は低下します。Algorithm'barneshut' の場合のみ適用されます。

例: 0.1

データ型: single | double

反復表示。01 または 2 を指定します。Verbose0 ではない場合、tsne はカルバック・ライブラー ダイバージェンスおよびその勾配のノルムの概要テーブルを NumPrint 回の反復ごとに出力します。

Verbose2 の場合、tsne はガウス カーネルの分散も出力します。tsne は、これらのカーネルを X の結合分布の計算で使用します。最小の分散と最大の分散でスケールが大きく異なる場合、X を再スケーリングすると結果がより適切になる可能性があります。

例: 2

データ型: single | double

出力引数

すべて折りたたむ

埋め込み点。nNumDimensions 列の行列として返されます。各行は 1 つの埋め込み点を表します。n は、データ XNaN エントリが含まれていない行の数です。NaN 入力データと結果のプロットを参照してください。

モデル化された入力分布と出力分布の間のカルバック・ライブラー ダイバージェンス。非負のスカラーとして返されます。詳細は、t-SNE アルゴリズムを参照してください。

詳細

すべて折りたたむ

カスタム距離関数

カスタム距離関数の構文は次のとおりです。

function D2 = distfun(ZI,ZJ)

tsneZIZJ をカスタム関数に渡し、カスタム関数が距離を計算します。

  • ZI は、X または Y の 1 行が含まれている 1 行 n 列のベクトルです。

  • ZJ は複数行の X または Y を含む m 行 n 列の行列です。

カスタム関数では、m 行 1 列の距離のベクトル D2 を返します。D2 の j 番目の要素は、観測値 ZI および ZJ(j,:) の間の距離です。

ヒント

データがスパースではない場合、組み込みの距離関数の方が関数ハンドルより高速です。

アルゴリズム

tsne は、相対的な類似度が元の高次元点の類似度に似ている一連の埋め込み点を低次元空間内に構築します。埋め込み点は、元のデータのクラスタリングを示します。

大まかに説明すると、このアルゴリズムは、元の点がガウス分布に由来し、埋め込み点がスチューデントの t 分布に由来するとしてそれぞれをモデル化します。そして、埋め込み点を移動することにより、これらの 2 つの分布の間におけるカルバック・ライブラー ダイバージェンスを最小化しようとします。

詳細は、t-SNEを参照してください。

R2017a で導入