Main Content

onehotencode

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

R2021b 以降

    説明

    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 の単一の変数を tblA の一意のクラスと同じ数の変数に置き換えます。tblB の各行において、tlbA のラベルのクラスに対応する変数には 1、それ以外のすべての変数には 0 が格納されます。

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

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

    すべて折りたたむ

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

    ラベルの列ベクトルを作成し、ベクトルの各行で単一の観測値を表します。ラベルを categorical 配列に変換します。

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

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

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

    関数 onehotencode を使用して、ラベルを one-hot ベクトルに符号化します。ラベルをベクトルの 2 番目の次元に展開してクラスを符号化します。onehotLabels の各列は一意のラベルに対応します。

    onehotLabels = onehotencode(labels,2)
    onehotLabels = 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 が格納された行ベクトルになります。関数は、位置 11 がリストの最初のカテゴリ (この場合は blue) を表すように、ラベルをカテゴリと同じ順序で符号化します。たとえば、onehotLabels の 2 行目には 1 列目に 1 があるため、その観測値のカテゴリは blue です。

    ラベルの符号化には dummyvar も使用できます。dummyvar はダミー変数を作成し、この場合は符号化されたラベル onehotLabels と同じものになります。関数 onehotencodedummyvar の比較については、代替機能を参照してください。

    地域コードの categorical ベクトルを、コードを表す one-hot ベクトルに符号化します。

    地域コードの数値行ベクトルを作成し、ベクトルの各列で単一の観測値を表します。数値ベクトルを categorical ベクトルに変換します。

    codes = [802 802 603 802 603 802];
    categCodes = categorical(codes);

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

    categories(categCodes)
    ans = 2x1 cell
        {'603'}
        {'802'}
    
    

    関数 onehotencode を使用して、地域コードを one-hot ベクトルに符号化します。各行が一意のラベルに対応するように、コードをベクトルの最初の次元に展開します。

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

    labels の各観測値は、地域コードのカテゴリに対応する位置に 1、それ以外のすべての位置に 0 が格納された列ベクトルになります。関数は、位置 1 (最初の行) の 1 がリストの最初のカテゴリを表すように、地域コードをカテゴリと同じ順序で符号化します。

    categorical 値の table を one-hot 符号化します。

    categorical データ ラベルの table を作成します。table の各行に単一の観測値を格納します。

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

    関数 onehotencode を使用して、クラス ラベルの 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 として、データ ラベルを符号化します。

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

    データ ラベルの行ベクトルを作成し、ベクトルの各列で単一の観測値を表します。

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

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

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

    encPets の各行が一意のラベルに対応するように、観測値を最初の次元に 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 値のベクトルに符号化されます。

    各変数を個別に符号化することで、複数の種類のクラス変数を含む 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 クラスが符号化されます。

    onehotencode を使用して作成した符号化されたデータを dummyvar を使用して作成したダミー変数と比較します。関数 dummyvar は table 入力を受け入れません。クラス変数を cell 配列 group に結合します。

    group = {color,pets,location};
    dummyData = dummyvar(group)
    dummyData = 6×11
    
         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 とダミー変数 dummyData では、符号化は同じですがデータ型が異なります。関数 onehotencodedummyvar の違いの詳細については、代替機能を参照してください。

    入力引数

    すべて折りたたむ

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

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

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

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

    データ型: categorical | numeric | string

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

    featureDim には、A の大きさが 1 の次元か、n (nA の次元数) よりも大きい値を指定する必要があります。

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

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

    • tblA に categorical 値が格納されていない場合、符号化するクラスを名前と値の引数 'ClassNames' を使用して指定する必要があります。関数は、classes におけるクラスの順序でベクトルを符号化します。

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

    データ型: table

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

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

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

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

    例: 'int64'

    データ型: char | string

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

    • 入力 A または tblA に categorical 値が格納されていない場合、classes を指定する必要があります。引数 classes を使用して、符号化の対象からいずれかのクラス ラベルを除外したり、ベクトルの要素を特定の順序で符号化したりすることもできます。

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

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

    出力引数

    すべて折りたたむ

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

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

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

    代替機能

    データ ラベルの符号化には、グループ化変数からダミー変数を作成する dummyvar も使用できます。次の表は、関数 onehotencodedummyvar をさまざまな使用例について比較したものです。

    使用例onehotencode を使用する場合dummyvar を使用する場合
    複数の変数の符号化onehotencode をループで使用します。例については、複数の変数をもつ one-hot 符号化 tableを参照してください。 入力引数 group を cell 配列または正の整数の行列として指定します。例については、複数のグループ化変数からのダミー変数の作成数値グループ化変数からのダミー変数の作成を参照してください。
    cell 配列形式の変数の符号化cell 配列変数を categorical 配列に変換します。 入力引数 group を 1 つ以上のグループ化変数を含む cell 配列として指定します。
    非カテゴリカル データ ラベルの符号化データ ラベルを categorical 配列として指定するか、符号化するクラスを名前と値の引数 ClassNames を使用して指定します。例については、クラスの one-hot 符号化サブセットを参照してください。dummyvar は非カテゴリカル グループ化変数を入力として受け入れるため、データ ラベルを変換する必要はありません。
    データ ラベルの配列の符号化展開する次元 (featureDim) を指定します。展開する次元がソフトウェアで自動的に判定されます。dummyvar は、ダミー変数を入力されたグループ化変数の列から作成された列をもつ数値配列として返します。

    多くの場合、関数 onehotencode または dummyvar を使用した符号化は必要はありません。Statistics and Machine Learning Toolbox™ のほとんどの関数は、カテゴリカル応答データを直接操作できます。分類関数や回帰関数も、ほとんどがカテゴリカル予測子を受け入れます。

    バージョン履歴

    R2021b で導入