Main Content

onehotencode

one-hot ベクトルへのデータ ラベルの符号化

    説明

    B = onehotencode(A,featureDim) は、categorical 配列 A 内のデータ ラベルを one-hot 符号化された配列 B に符号化します。この関数は、featureDim で指定された次元に沿って、A の各要素を A に含まれる一意のクラスの数と同じ長さの数値ベクトルに置き換えます。このベクトルでは、A 内のラベルのクラスに対応する位置に 1 が格納され、その他のすべての位置に 0 が格納されます。<undefined> 値は NaN 値に符号化されます。

    tblB = onehotencode(tblA) は、table tblA 内の categorical データ ラベルを one-hot 符号化された数値から成る table に符号化します。この関数は、tblA の 1 つの変数を、tblA に含まれる一意のクラスの数と同じ数の変数に置き換えます。tblB 内の各行では、tlbA 内のラベルのクラスに対応する変数に 1 が格納され、その他のすべての変数に 0 が格納されます。

    ___ = onehotencode(___,typename) は、ラベルをデータ型 typename の数値に符号化します。この構文は、前の構文の入力引数および出力引数のいずれかと一緒に使用します。

    ___ = onehotencode(___,'ClassNames',classes) は、符号化で使用するクラスの名前も指定します。この構文は、AtblA のいずれにも categorical 値が含まれていない場合、特定のクラス ラベルを符号化から除外する場合、またはベクトルの要素を特定の順序で符号化する場合に使用します。classes に存在しないクラスの A または tblA に含まれるラベルは、NaN 値から成るベクトルに符号化されます。

    すべて折りたたむ

    クラス ラベルから成る categorical ベクトルを、そのラベルを表す one-hot ベクトルに符号化します。

    ラベルの列ベクトルを作成します。このベクトルの各行は 1 つの観測値を表します。ラベルを categorical 配列に変換します。

    labels = ["red"; "blue"; "red"; "green"; "yellow"; "blue"];
    labels = categorical(labels);

    カテゴリの順序を表示します。

    categories(labels)
    ans = 4x1 cell
        {'blue'  }
        {'green' }
        {'red'   }
        {'yellow'}
    
    

    ラベルを one-hot ベクトルに符号化します。2 番目の次元のベクトルにラベルを展開し、クラスを符号化します。

    labels = onehotencode(labels,2)
    labels = 6×4
    
         0     0     1     0
         1     0     0     0
         0     0     1     0
         0     1     0     0
         0     0     0     1
         1     0     0     0
    
    

    labels に含まれる各観測値は、クラス ラベルのカテゴリに対応する位置に 1 が格納され、その他のすべての位置に 0 が格納された行ベクトルになります。この関数は、1 番目にある 1 がリストの最初のカテゴリ (この場合は 'blue') を表すように、カテゴリと同じ順序でラベルを符号化します。

    categorical 値から成る table を one-hot 符号化します。

    categorical データ ラベルから成る table を作成します。table の各行に 1 つの観測値が格納されます。

    color = ["blue"; "red"; "blue"; "green"; "yellow"; "red"];
    color = categorical(color);
    color = table (color);

    クラス ラベルの table を one-hot 符号化します。

    color = onehotencode(color)
    color=6×4 table
        blue    green    red    yellow
        ____    _____    ___    ______
    
         1        0       0       0   
         0        0       1       0   
         1        0       0       0   
         0        1       0       0   
         0        0       0       1   
         0        0       1       0   
    
    

    table の各列がクラスを表します。この関数は、クラスに対応する列が 1 になり、その他の位置はすべて 0 になるよう、データ ラベルを符号化します。

    目的とは関係ないクラスがデータに含まれている場合、クラスのサブセットのみを使用してデータ ラベルを符号化します。

    データ ラベルの行ベクトルを作成します。このベクトルの各列は 1 つの観測値を表します。

    pets = ["dog" "fish" "cat" "dog" "cat" "bird"];

    符号化するクラスのリストを定義します。これらのクラスは、観測値に含まれるクラスのサブセットです。

    animalClasses = ["bird"; "cat"; "dog"];

    観測値を最初の次元に one-hot 符号化します。符号化するクラスを指定します。

    encPets = onehotencode(pets,1,"ClassNames",animalClasses)
    encPets = 3×6
    
         0   NaN     0     0     0     1
         0   NaN     1     0     1     0
         1   NaN     0     1     0     0
    
    

    符号化するクラスのリストに存在しないクラスの観測値は、NaN 値から成るベクトルに符号化されます。

    onehotencode を使用して、イメージのセマンティック セグメンテーションなどのクラス ラベルの行列を符号化します。

    クラス ラベルから成るシンプルな 15 行 15 列のピクセル セグメンテーション行列を定義します。

    A = "blue";
    B = "green";
    C = "black";
    
    A = repmat(A,8,15);
    B = repmat(B,7,5);
    C = repmat(C,7,5);
    
    seg = [A;B C B];

    セグメンテーション行列を categorical 配列に変換します。

    seg = categorical(seg);

    セグメンテーション行列を single 型の配列に one-hot 符号化します。符号化したラベルを 3 番目の次元に展開します。

    encSeg = onehotencode(seg,3,"single");

    符号化されたセグメンテーションのサイズを確認します。

    size(encSeg)
    ans = 1×3
    
        15    15     3
    
    

    セグメンテーション行列に含まれている選択可能な 3 つのピクセル クラスが、3 番目の次元にベクトルとして符号化されています。

    使用するデータが、型の異なる複数のクラス変数を含む table である場合、変数ごとに個別に符号化することができます。

    型が異なる categorical データの複数の観測値から成る table を作成します。

    color = ["blue"; "red"; "blue"; "green"; "yellow"; "red"];
    color = categorical(color);
    
    pets = ["dog"; "fish"; "cat"; "dog"; "cat"; "bird"];
    pets = categorical(pets);
    
    location = ["USA"; "CAN"; "CAN"; "USA"; "AUS"; "USA"];
    location = categorical(location);
    
    data = table(color,pets,location)
    data=6×3 table
        color     pets    location
        ______    ____    ________
    
        blue      dog       USA   
        red       fish      CAN   
        blue      cat       CAN   
        green     dog       USA   
        yellow    cat       AUS   
        red       bird      USA   
    
    

    for ループを使用して、各 table 変数を one-hot 符号化し、符号化されたデータを含む新しい table にその結果を追加します。

    encData = table();
    
    for i=1:width(data)
     encData = [encData onehotencode(data(:,i))];
    end
    
    encData
    encData=6×11 table
        blue    green    red    yellow    bird    cat    dog    fish    AUS    CAN    USA
        ____    _____    ___    ______    ____    ___    ___    ____    ___    ___    ___
    
         1        0       0       0        0       0      1      0       0      0      1 
         0        0       1       0        0       0      0      1       0      1      0 
         1        0       0       0        0       1      0      0       0      1      0 
         0        1       0       0        0       0      1      0       0      0      1 
         0        0       0       1        0       1      0      0       1      0      0 
         0        0       1       0        1       0      0      0       0      0      1 
    
    

    encData の各行では、各観測値に関する 3 つの異なるカテゴリカル クラスが符号化されています。

    入力引数

    すべて折りたたむ

    符号化するデータ ラベルの配列。categorical 配列、数値配列、または string 配列として指定します。

    • A が categorical 配列の場合、one-hot 符号化されたベクトルの要素の順序は、categories(A) での順序と同じになります。

    • A が categorical 配列でない場合、名前と値の引数 'ClassNames' を使用して、符号化するクラスを指定しなければなりません。この関数は、classes でクラスが現れる順序でベクトルを符号化します。

    • 未定義の値、または classes に存在しない値が A に含まれている場合、この関数は、それらの値を NaN 値から成るベクトルとして符号化します。typename'double' または 'single' でなければなりません。

    データ型: categorical | numeric | string

    符号化するデータ ラベルの table。table として指定します。この table には、観測ごとに 1 つの変数と 1 つの行が含まれていなければなりません。各エントリには、categorical スカラー、数値スカラー、または string スカラーが含まれていなければなりません。

    • tblA に categorical 値が含まれている場合、one-hot 符号化されたベクトルの要素の順序は、カテゴリの順序 (たとえば categories(tbl(1,n)) での順序) と同じになります。

    • tblA に categorical 値が含まれていない場合、名前と値の引数 'ClassNames' を使用して、符号化するクラスを指定しなければなりません。この関数は、classes でクラスが現れる順序でベクトルを符号化します。

    • 未定義の値、または classes に存在しない値が tblA に含まれている場合、この関数は、それらの値を NaN 値として符号化します。typename'double' または 'single' でなければなりません。

    データ型: table

    ラベルを符号化するために展開する次元。正の整数として指定します。

    featureDim は、A に含まれる大きさが 1 の次元を指定するか、n より大きくなければなりません。ここで、nA に含まれる次元の数です。

    符号化されたラベルのデータ型。文字ベクトルまたは string スカラーとして指定します。

    • 分類ラベルの入力が、categorical 配列、数値配列、または string 配列の場合、符号化されたラベルはデータ型 typename の配列として返されます。

    • 分類ラベルの入力が table の場合、符号化されたラベルは table として返されます。この場合、各エントリのデータ型は typename になります。

    typename の有効な値は、浮動小数点数、符号付き整数、符号なし整数、および logical 型です。

    例: 'int64'

    データ型: char | string

    符号化するクラス。文字ベクトルの cell 配列、string ベクトル、数値ベクトル、または 2 次元の文字配列として指定します。

    • 入力 A または tblA に categorical 値が含まれていない場合、classes を指定しなければなりません。引数 classes は、特定のクラス ラベルを符号化から除外する場合、またはベクトルの要素を特定の順序で符号化する場合にも使用できます。

    • 未定義の値、または classes に存在しない値が A または tblA に含まれている場合、この関数は、それらの値を NaN 値から成るベクトルに符号化します。typename'double' または 'single' でなければなりません。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | cell

    出力引数

    すべて折りたたむ

    符号化されたラベル。数値配列として返されます。

    符号化されたラベル。table として返されます。

    tblB の各行には、1 つの観測値に対する one-hot 符号化されたラベルが tblA 内と同じ順序で格納されます。各行では、tlbA 内のラベルのクラスに対応する変数に 1 が格納され、その他のすべての変数に 0 が格納されます。

    バージョン履歴

    R2020b で導入