目次
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以上担当
理化学研究所にて研究員を拝命中 応用数理学会所属