> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-wbdocs-1882.mintlify.site/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-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/embedding_projector.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=cef12d7059dbbb7527e12eb7c4e09688" 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 内でそれらを視覚的に分析したいと考えていることを前提としています。

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

* [ライブインタラクティブデモ レポート](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],  # embedding 1
      [0.3, 0.1, 0.9, 0.2, 0.7],  # embedding 2
      [0.4, 0.5, 0.2, 0.2, 0.1],  # embedding 3
  ]
  run.log(
      {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
  )
  run.finish()
```

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

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

<div id="digits-mnist">
  ### 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)[s](https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)) を見てみましょう。このデータセットには 1797 件のレコードがあり、それぞれ 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) 、アルゴリズムのパラメーター、さらにはオーバーレイ (この場合は、点にカーソルを合わせると画像を表示) まで設定できます。このケースでは、これらはすべて「smart defaults」が使われているため、`2D Projection` を 1 回クリックするだけで、ほぼ同じ表示になるはずです。([この埋め込みチュートリアルの例を操作する](https://wandb.ai/timssweeney/embedding_tutorial/runs/k6guxhum?workspace=user-timssweeney))。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/embedding_projector.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=cef12d7059dbbb7527e12eb7c4e09688" alt="MNIST digits projection" width="1846" height="1296" data-path="images/weave/embedding_projector.png" />
</Frame>

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

埋め込みは、さまざまな形式でログできます。

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

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

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

さらに、他のすべての表と同様に、表の構築方法にもさまざまな選択肢があります。

1. **dataframe** から直接作成する: `wandb.Table(dataframe=df)`
2. **データのリスト**から直接作成する: `wandb.Table(data=[...], columns=[...])`
3. 表を**1 行ずつ段階的に**構築する (コード内にループがある場合に便利です) 。`table.add_data(...)` を使って表に行を追加します
4. 表に**埋め込み列**を追加する (埋め込み形式の予測のリストがある場合に便利です) : `table.add_col("col_name", ...)`
5. **計算列**を追加する (表全体に適用したい関数やモデルがある場合に便利です) : `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-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/plotting_options_left.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=7689cc86ace40419213da6d075dcf91f" alt="UMAP のパラメーター" width="803" height="380" data-path="images/weave/plotting_options_left.png" />
</Frame>

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

<Note>
  注: 現在、3 つすべてのアルゴリズムで、1000 行・50 次元のランダムなサブセットにダウンサンプリングしています。
</Note>
