manifold.trustworthinessの解説

目次

1. manifoldの概要
2. trustworthiness
3. 実験
3.1 環境構築
3.2 データロード
3.3 Isomap
3.4 trustworthiness

 

1. manifold(多様体)の概要

Manifoldとは、scikit-learnのモジュールで、データの次元縮約、次元変更、距離計算などのEmbeddingモジュールです。

 

manifold.Isomap: IsomapのEmbedding

manifold.LocallyLinearEmbedding:  ローカル線形ののEmbedding

manifold.MDS:多次元尺度構成法

manifold.SpectralEmbedding:非線形次元削減のEmbedding

manifold.TSNE: T分散確率的近傍のEmbedding

manifold.locally_linear_embedding: データに対してローカル線形のEmbedding

manifold.smacof:SMACOFのアルゴリズムで多次元尺度構成法

manifold.spectral_embedding: グラフラプラシアンの最初の固有ベクトルにサンプル

manifold.trustworthiness: ローカル構造がどの程度保持されているかを表します

 

2. trustworthiness

信頼性は[0、1]以内のデータです。

0に近いほど信頼性が少なく、二つのデータは似ていないと判断します。

1 は信頼性が高く、二つのデータは似ていると判断します。

 

それは次のように定義されます。

各サンプルiは、出力空間のk番目の最近接隣人であり、各サンプルjは、入力空間のそのr(i,j)-th番目の最近接隣人である。言い換えれば,出力空間内の予期せぬ最寄の隣人は,入力空間内のランクに比例してペナルティを受けます。

 

関数:

sklearn.manifold.trustworthiness(X, X_embedded, *, n_neighbors=5, metric=’euclidean’)

 

パラメター:

X: ndarray

メトリックが「事前計算」する場合、Xは2乗距離行列である必要があります。

 

X_embedded: ndarray

低次元空間へのトレーニングデータの埋め込みです。

 

n_neighbors: int、デフォルト= 5

考慮される近傍の数。 [1]で説明されているように、[0、1]内にある信頼性を確保するには、n_samples/2より小さくする必要があります。 そうしないと、エラーが発生します。

 

metric: str、デフォルト=’euclidean’

元の入力空間からのサンプル間のデータ距離を計算するために使用する距離の種類です。

 

3. 実験

環境:Google Colab

データセット:手書き数字文字のデータセット(1797×64の2次元配列)

モデル:Isomap,trustworthiness

 

3.1 環境構築

ライブラリをインポートします。

import numpy as np

from sklearn.datasets import load_digits

from sklearn.manifold import Isomap,trustworthiness

import matplotlib.pyplot as plt

3.2 データロード

Digitsのデータセットを読み込みます。1797画像の64(8×8)の行列です。

X, _ = load_digits(return_X_y=True)

print(X.shape)

print(X)

(1797, 64)

[[ 0.  0.  5. …  0.  0.  0.]

[ 0.  0.  0. … 10.  0.  0.]

[ 0.  0.  0. … 16.  9.  0.]

[ 0.  0.  1. …  6.  0.  0.]

[ 0.  0.  2. … 12.  0.  0.]

[ 0.  0. 10. … 12.  1.  0.]]

 

サンプルデータの可視化

img = np.reshape(X[1], (8,8))

plt.imshow(img, cmap=plt.cm.gray_r, interpolation=’nearest’)

plt.axis(‘off’)

plt.show()

 

3.3 Isomap

Isomapでの2次元に変更しました。

embedding = Isomap(n_components=2)

X_transformed2 = embedding.fit_transform(X).copy()

print(X_transformed2.shape)

print(X_transformed2)

(1797, 2)

[[163.39526445  28.06891135]

[-46.00448978  48.29792057]

[-97.23256557  21.60527119]

[-49.97218081 -24.93724342]

[ -0.96914751 -71.60775029]

[ -9.41416423 -36.8662784 ]]

 

Isomapでの3次元に変更しました。

embedding = Isomap(n_components=3)

X_transformed3 = embedding.fit_transform(X).copy()

print(X_transformed3.shape)

print(X_transformed3)

(1797, 3)

[[163.39526445  28.06891135 -54.99957152]

[-46.00448978  48.29792057  75.01700901]

[-97.23256557  21.60527119  75.77024271]

[-49.97218081 -24.93724342  40.28705481]

[ -0.96914751 -71.60775029   2.28307633]

[ -9.41416423 -36.8662784   38.66405207]]

 

3.4 trustworthiness

元データと2次元のデータに対して、trustworthinessを計算します。そして、元データと3次元のデータのtrustworthinessを計算します。3次元のデータのtrustworthinessのほうが高く、元データにたいして、似ている結果であることがわかりました。

trustworthiness_value2 = trustworthiness(X=X,

X_embedded=X_transformed2,

n_neighbors=5,

metric=’euclidean’)

 

trustworthiness_value3 = trustworthiness(X=X,

X_embedded=X_transformed3,

n_neighbors=5,

metric=’euclidean’)

 

print(trustworthiness_value3)

print(trustworthiness_value2)

0.8628501076105664

0.9474936956289798

 

参照資料

資料: https://scikit-learn.org/stable/modules/generated/sklearn.manifold.trustworthiness.html

論文:https://link.springer.com/chapter/10.1007/3-540-44668-0_68

GitHub:https://github.com/scikit-learn/scikit-learn/blob/80598905e/sklearn/manifold/_t_sne.py#L445

 

担当者:HM

香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当

理化学研究所にて研究員を拝命中 応用数理学会所属