> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> W&B の Embedding Projector を使用すると、PCA、UMAP、t-SNE などの一般的な次元削減アルゴリズムを使って、多次元埋め込みを 2D 平面にプロットできます。

# オブジェクトを埋め込む

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wYBIlf7cqDpGjWr9/images/weave/embedding_projector.png?fit=max&auto=format&n=wYBIlf7cqDpGjWr9&q=85&s=9fdd987748fbbae7dcb2ca1ecd1788f2" alt="Embedding Projector" width="1846" height="1296" data-path="images/weave/embedding_projector.png" />
</Frame>

[埋め込み](https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture)は、人、画像、投稿、単語などのオブジェクトを、複数の数値のリスト (*ベクトル* とも呼ばれます) で表現したものです。機械学習やデータサイエンスでは、さまざまなアプリケーションで、多様な手法を使って埋め込みを生成できます。このページは、埋め込みの基本をすでに理解しており、W\&B 内で視覚的に分析したい方向けです。

このガイドでは、埋め込みを W\&B にログし、Embedding Projector を使って PCA、UMAP、t-SNE などの次元削減アルゴリズムにより 2D 平面にプロットする方法を説明します。このように埋め込みを可視化することで、クラスターを探索し、データポイント間の関係を調べ、埋め込みが期待どおりの構造を捉えているかを検証できます。

<div id="embedding-examples">
  ## 埋め込みの例
</div>

以下のリソースでは、ご自身で試す前に、Embedding Projector の動作を確認できます。

* [ライブインタラクティブデモ レポート](https://wandb.ai/timssweeney/toy_datasets/reports/Feature-Report-W-B-Embeddings-Projector--VmlldzoxMjg2MjY4?accessToken=bo36zrgl0gref1th5nj59nrft9rc4r71s53zr2qvqlz68jwn8d8yyjdz73cqfyhq)
* [Colabの例](https://colab.research.google.com/drive/1DaKL4lZVh3ETyYEM1oJ46ffjpGs8glXA#scrollTo=D--9i6-gXBm_)

<div id="hello-world">
  ### Hello world
</div>

この最小限の例では、埋め込みをログしてプロジェクタで表示するために必要な最小限のコードを示します。W\&B では、`wandb.Table` クラスを使って埋め込みをログできます。以下は、それぞれが 5 次元で構成される 3 つの埋め込みの例です。

```python theme={null}
import wandb

with wandb.init(project="embedding_tutorial") as run:
  embeddings = [
      # D1   D2   D3   D4   D5
      [0.2, 0.4, 0.1, 0.7, 0.5],  # 埋め込み 1
      [0.3, 0.1, 0.9, 0.2, 0.7],  # 埋め込み 2
      [0.4, 0.5, 0.2, 0.2, 0.1],  # 埋め込み 3
  ]
  run.log(
      {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
  )
  run.finish()
```

前述のコードを実行すると、W\&B ダッシュボードにデータを含む新しい表が作成されます。右上のパネルセレクターから **2D Projection** を選択すると、埋め込みを 2 次元でプロットできます。W\&B は適切なデフォルトを自動的に選択しますが、歯車アイコンをクリックして設定メニューから変更できます。この例では、W\&B は利用可能な 5 つの数値次元をすべて使用します。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wKCrMJZKG3PxyJhv/images/app_ui/weave_hello_world.png?fit=max&auto=format&n=wKCrMJZKG3PxyJhv&q=85&s=dda0c4699ebae70004bfb6d27ba6d164" alt="2D 投影の例" width="1611" height="708" data-path="images/app_ui/weave_hello_world.png" />
</Frame>

<div id="digits-mnist">
  ### Digits MNIST
</div>

次の例では、より高次元のデータとより豊富なオーバーレイを使った、より実践的なワークフローを示します。前の例では埋め込みをログする基本的な仕組みを示しましたが、実際には通常、はるかに多くの次元とサンプルを扱います。[SciKit-Learn](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) で利用できる MNIST Digits データセット ([UCI ML hand-written digits dataset](https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)) を考えてみましょう。このデータセットには 1,797 件のレコードがあり、それぞれ 64 次元です。この問題は、10 クラスの分類タスクです。また、可視化のために入力データを画像に変換することもできます。

```python theme={null}
import wandb
from sklearn.datasets import load_digits

with wandb.init(project="embedding_tutorial") as run:

  # データセットを読み込む
  ds = load_digits(as_frame=True)
  df = ds.data

  # "target" 列を作成する
  df["target"] = ds.target.astype(str)
  cols = df.columns.tolist()
  df = df[cols[-1:] + cols[:-1]]

  # "image" 列を作成する
  df["image"] = df.apply(
      lambda row: wandb.Image(row[1:].values.reshape(8, 8) / 16.0), axis=1
  )
  cols = df.columns.tolist()
  df = df[cols[-1:] + cols[:-1]]

  run.log({"digits": df})
```

前述のコードを実行すると、UI に再び表が表示されます。**2D Projection** を選択して、埋め込みの定義、色、アルゴリズム (PCA、UMAP、t-SNE) 、アルゴリズムのパラメーター、オーバーレイを設定します。この場合、W\&B ではポイントにカーソルを合わせると画像が表示されます。これらはすべて便利なデフォルト設定なので、**2D Projection** を 1 回クリックするだけで、同様の表示が見られるはずです。[この埋め込みチュートリアルの例を操作してみてください](https://wandb.ai/timssweeney/embedding_tutorial/runs/k6guxhum?workspace=user-timssweeney)。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wYBIlf7cqDpGjWr9/images/weave/embedding_projector.png?fit=max&auto=format&n=wYBIlf7cqDpGjWr9&q=85&s=9fdd987748fbbae7dcb2ca1ecd1788f2" alt="MNIST 数字の投影" width="1846" height="1296" data-path="images/weave/embedding_projector.png" />
</Frame>

<div id="logging-options">
  ## ログオプション
</div>

以下のセクションでは、埋め込みデータを W\&B にログするときに、サポートされている構造化方法を説明します。埋め込みは複数の形式でログできます。

* **単一の埋め込み列:** 多くの場合、データはすでに行列のような形式になっています。この場合は、単一の埋め込み列を作成できます。このとき、セル値のデータ型には `list[int]`、`list[float]`、または `np.ndarray` を使用できます。
* **複数の数値列:** 前の 2 つの例ではこの方法を使用しており、各次元に対して 1 つの列を作成します。W\&B では、セルに Python の `int` または `float` を使用できます。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wYBIlf7cqDpGjWr9/images/weave/logging_options.png?fit=max&auto=format&n=wYBIlf7cqDpGjWr9&q=85&s=dcafa5eca61ed6e79ad8b62e389af4f7" alt="単一の埋め込み列" width="422" height="301" data-path="images/weave/logging_options.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wYBIlf7cqDpGjWr9/images/weave/logging_option_image_right.png?fit=max&auto=format&n=wYBIlf7cqDpGjWr9&q=85&s=f57315d55a458696a91017aa720880bb" alt="複数の数値列" width="416" height="387" data-path="images/weave/logging_option_image_right.png" />
</Frame>

他のすべてのテーブルと同様に、テーブルの構築方法にはいくつかの選択肢があります。

* **dataframe** から直接 `wandb.Table(dataframe=df)` を使用する。
* **データのリスト** から直接 `wandb.Table(data=[...], columns=[...])` を使用する。
* テーブルを **行ごとに段階的に構築する** (コード内にループがある場合に便利です) 。`table.add_data(...)` を使用してテーブルに行を追加します。
* テーブルに **埋め込み列** を追加する (埋め込み形式の予測のリストがある場合に便利です) : `table.add_col("col_name", ...)`。
* **計算列** を追加する (テーブル全体に適用したい function や model がある場合に便利です) : `table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})`。

<div id="plotting-options">
  ## プロットオプション
</div>

埋め込みをログした後、その投影方法と表示方法を調整できます。**2D Projection** を選択したら、歯車アイコンをクリックして表示設定を編集できます。対象の列を選択するだけでなく (前のセクションを参照) 、使用するアルゴリズムと必要なパラメーターも選択できます。以下の画像に、UMAP と t-SNE のパラメーターを示します。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wYBIlf7cqDpGjWr9/images/weave/plotting_options_left.png?fit=max&auto=format&n=wYBIlf7cqDpGjWr9&q=85&s=64efef689f252c73012dea76df6ca303" alt="UMAP のパラメーター" width="803" height="380" data-path="images/weave/plotting_options_left.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541/wYBIlf7cqDpGjWr9/images/weave/plotting_options_right.png?fit=max&auto=format&n=wYBIlf7cqDpGjWr9&q=85&s=eb292dd05df661defc0956954ff668da" alt="t-SNE のパラメーター" width="799" height="384" data-path="images/weave/plotting_options_right.png" />
</Frame>

<Note>
  W\&B は、3 つすべてのアルゴリズムで、1,000 行・50 次元のランダムなサブセットにダウンサンプリングします。
</Note>
