onehotencode

Закодируйте метки данных в одноядерные векторы

    Описание

    пример

    B = onehotencode(A,featureDim) кодирует метки данных в категориальном массиве A в одноразовый закодированный массив B. Функция заменяет каждый элемент A с числовым вектором длины, равным количеству уникальных классов в A вдоль размерности, заданной как featureDim. Вектор содержит 1 в положении, соответствующем классу метки в A, и 0 в любом другом положении. Любой <undefined> значения кодируются в NaN значения.

    пример

    tblB = onehotencode(tblA) кодирует категориальные метки данных в таблице tblA в таблицу с кодированными числовыми значениями с одним «горячим» кодированием. Функция заменяет одну переменную tblA с таким количеством переменных, как количество уникальных классов в tblA. Каждая строка в tblB содержит 1 в переменной, соответствующей классу метки в tlbA и a 0 во всех других переменных.

    пример

    ___ = onehotencode(___,typename) кодирует метки в числовые значения типа данных typename. Используйте этот синтаксис с любым из входных и выходных аргументов в предыдущих синтаксисах.

    пример

    ___ = onehotencode(___,'ClassNames',classes) также задает имена классов, используемых для кодирования. Используйте этот синтаксис при A или tblA не содержат категориальных значений, когда необходимо исключить из кодирования какие-либо метки классов или когда необходимо закодировать элементы вектора в определенном порядке. Любая метка в A или tblA класса, который не существует в classes кодируется в вектор NaN значения.

    Примеры

    свернуть все

    Закодируйте категориальный вектор меток классов в векторы с одним контактом, представляющие метки.

    Создайте вектор-столбец меток, где каждая строка вектора представляет одно наблюдение. Преобразуйте метки в категориальный массив.

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

    Просмотрите порядок категорий.

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

    Закодируйте метки в векторы с одним контактом. Разверните метки в векторы во втором измерении, чтобы закодировать классы.

    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'.

    Однократное кодирование таблицы категорийных значений.

    Составьте таблицу категориальных меток данных. Каждая строка в таблице содержит одно наблюдение.

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

    Однократное кодирование таблицы меток классов.

    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   
    
    

    Каждый столбец таблицы представляет класс. Функция кодирует метки данных с помощью 1 в столбце соответствующего класса, и 0 повсюду в другом месте.

    Если не все классы в данных релевантны, закодируйте метки данных, используя только подмножество классов.

    Создайте вектор-строку меток данных, где каждый столбец вектора представляет одно наблюдение

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

    Определите список классов, которые нужно закодировать. Эти классы являются подмножеством присутствующих в наблюдениях.

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

    Одно-горячее кодирование наблюдений в первую размерность. Задайте классы для кодирования.

    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];

    Преобразуйте матрицу сегментации в категориальный массив.

    seg = categorical(seg);

    Однократное кодирование матрицы сегментации в массив типов single. Разверните закодированные метки в третью размерность.

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

    Проверьте размер закодированной сегментации.

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

    Три возможных класса пикселей в матрице сегментации закодированы как векторы в третьей размерности.

    Если ваши данные являются таблицей, которая содержит несколько типов переменных класса, можно закодировать каждую переменную отдельно.

    Составьте таблицу наблюдений за несколькими типами категориальных данных.

    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-цикл для одноразового кодирования каждой табличной переменной и добавления ее к новой таблице, содержащей закодированные данные.

    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 кодирует три различных категориальных класса для каждого наблюдения.

    Входные параметры

    свернуть все

    Массив меток данных для кодирования, заданный как категориальный массив, числовой массив или строковые массивы.

    • Если A является категориальным массивом, элементы векторов с одним горячим кодированием совпадают с тем же порядком, в categories(A).

    • Если A не является категориальным массивом, необходимо задать классы для кодирования с помощью 'ClassNames' аргумент имя-значение. Функция кодирует векторы в том порядке, в котором появляются классы classes.

    • Если A содержит неопределенные значения или значения, отсутствующие в classes, функция кодирует эти значения как вектор NaN значения. typename должен быть 'double' или 'single'.

    Типы данных: categorical

    Таблица меток данных для кодирования, заданная как таблица. Таблица должна содержать одну переменную и одну строку для каждого наблюдения. Каждая запись должна содержать категориальный скаляр, числовой скаляр или строковый скаляр.

    • Если tblA содержит категориальные значения, элементы векторов с одним «горячим» кодированием совпадают с порядком категорий; для примера такой же порядок, как и categories(tbl(1,n)).

    • Если tblA не содержит категориальных значений, необходимо задать классы для кодирования с помощью 'ClassNames' аргумент имя-значение. Функция кодирует векторы в том порядке, в котором появляются классы classes.

    • Если tblA содержит неопределенные значения или значения, отсутствующие в classesфункция кодирует эти значения следующим NaN значения. typename должен быть 'double' или 'single'.

    Типы данных: table

    Размерность для расширения для кодирования меток, заданная как положительное целое число.

    featureDim необходимо задать синглтонную размерность A, или быть больше n где n - количество размерностей A.

    Тип данных закодированных меток, заданный как вектор символов или строковый скаляр.

    • Если вход классификационной метки является категориальным массивом, числовым массивом или строковыми массивами, то закодированные метки возвращаются как массив типа данных typename.

    • Если вход классификационной метки является таблицей, закодированные метки возвращаются как таблица, где каждый элемент имеет тип данных typename.

    Допустимые значения typename являются плавающими точками, подписанными и беззнаковыми целыми числами и логическими типами.

    Пример: 'int64'

    Типы данных: char | string

    Классы для кодирования, заданные как массив ячеек из векторов символов, строковый вектор, числовой вектор или двумерный символьный массив.

    • Если вход A или tblA не содержит категориальных значений, тогда необходимо задать classes. Можно также использовать classes аргумент, чтобы исключить из кодирования любые метки классов или закодировать элементы вектора в определенном порядке.

    • Если A или tblA содержит неопределенные значения или значения, отсутствующие в classesфункция кодирует эти значения в вектор NaN значения. typename должен быть 'double' или 'single'.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | cell

    Выходные аргументы

    свернуть все

    Закодированные метки, возвращенные как числовой массив.

    Закодированные метки, возвращенные как таблица.

    Каждая строка tblB содержит одноразовую закодированную метку для одиночного наблюдения в том же порядке, как и в tblA. Каждая строка содержит 1 в переменной, соответствующей классу метки в tlbA и a 0 во всех других переменных.

    Введенный в R2020b