ラベルをワンホットエンコードする

PythonBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、単一ラベル分類タスクのラベルデータに対してワンホットエンコーディングを行う方法を学びます。ワンホットエンコーディングは、カテゴリ変数を機械学習アルゴリズムで使用できる形式に変換するために使用される一般的な手法です。

🎯 タスク

このプロジェクトでは、以下を学びます。

  • ワンホットエンコーディングの概念と機械学習における重要性を理解する方法。
  • サンプルラベルのリストに対してワンホットエンコーディングを行う関数を実装する方法。
  • サンプルデータを使ってラベルエンコーディング関数をテストする方法。

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • カテゴリラベルを機械学習モデルに適した数値形式に変換する。
  • 機械学習パイプラインにおけるデータ前処理と特徴量エンジニアリングの重要性を理解する。
  • 機械学習タスクのためにデータを操作および変換するための Python における実践的なコーディングスキルを示す。

ラベルをワンホットエンコードする

このステップでは、単一ラベル分類タスクのラベルデータに対してワンホットエンコーディングを行う方法を学びます。

ワンホットエンコーディングは、カテゴリ変数を機械学習アルゴリズムで使用できる形式に変換するために使用される一般的な手法です。単一ラベル分類の場合、データセット内の各ユニークなラベルは、バイナリベクトルとして表されます。ここで、リスト内のラベルの位置は 1 としてマークされ、その他のすべての位置は 0 となります。

/home/labex/project ディレクトリにある label_process.py ファイルを開き、次のコードを追加します。

def label_process(labels: List[str], sample_y: List[str]) -> List[List[int]]:
    """
    サンプルラベルのリストを分類タスクに適した形式に変換します。

    この関数は、各サンプルラベルに対してバイナリリストを作成します。ここで、'labels' リスト内のラベルの位置は 1 としてマークされ、その他のすべての位置は 0 となります。
    これがワンホットエンコーディングとして知られています。

    Args:
        labels (List[str]): データセット内のユニークなラベル/クラスのリスト。
        sample_y (List[str]): 変換するサンプルラベルのリスト。

    Returns:
        List[List[int]]: 変換されたラベル。各ラベルは、'labels' リスト内の位置に対応するバイナリリストとして表されます。
    """
    train_y = []
    for y in sample_y:
        train = [0] * len(labels)
        train[labels.index(y)] = 1
        train_y.append(train)
    return train_y
  1. label_process 関数では、ワンホットエンコーディングのロジックを実装しています。この関数には 2 つの引数があります。
    • labels: データセット内のユニークなラベル/クラスのリスト
    • sample_y: 変換するサンプルラベルのリスト
  2. 変換されたラベルを格納するための空のリスト train_y を初期化します。
  3. sample_y リストをループ処理します。
    • 各ラベル y に対して、ユニークなラベルの数 (len(labels)) に等しい長さの新しいリスト train を作成し、すべての要素を 0 で初期化します。
    • index() メソッドを使用して、labels リスト内の現在のラベル y のインデックスを見つけ、train 内の対応する要素を 1 に設定します。
    • train リストを train_y リストに追加します。
  4. ループ処理が終了すると、train_y リストにはすべてのサンプルのワンホットエンコードされたラベルが含まれます。label_process 関数からこのリストを返します。

ラベルエンコーディングのテスト

このステップでは、いくつかのサンプルデータを提供して出力を検証することで、label_process 関数をテストします。

label_process.py ファイルに次のコードを追加します。

## 同じファイルの続き
if __name__ == "__main__":
    labels = ["Python", "Java", "Tensorflow", "Springboot", "Keras"]
    sample_y = ["Python", "Python", "Python", "Java", "Java", "Keras"]
    train_y = label_process(labels, sample_y)
    print(train_y)

このコードは、ユニークなラベルのリスト (labels) とサンプルラベルのリスト (sample_y) を定義し、次に label_process 関数を呼び出して、結果として得られるワンホットエンコードされたラベルを表示します。

  1. label_process.py ファイルを保存し、ターミナルから次のコマンドでスクリプトを実行します。
python label_process.py

出力は次のようになるはずです。

[[1, 0, 0, 0, 0],
 [1, 0, 0, 0, 0],
 [1, 0, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 0, 0, 0, 1]]

この出力は、サンプルデータのワンホットエンコードされたラベルを示しています。各行は 1 つのサンプルを表し、列は labels リスト内のラベルの位置に対応しています。

おめでとうございます!単一ラベル分類タスクのラベルのワンホットエンコーディングを正常に実装しました。

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って、あなたの技術を向上させることができます。

✨ 解答を確認して練習✨ 解答を確認して練習