exponenta event banner

onehotencode

Кодирование меток данных в одноконтурные векторы

    Описание

    пример

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

    пример

    tblB = onehotencode(tblA) кодирует метки категориальных данных в таблице tblA в таблицу однокодированных кодированных числовых значений. Функция заменяет одну переменную tblA с таким количеством переменных, как количество уникальных классов в tblA. Каждая строка в tblB содержит 1 в переменной, соответствующей классу метки в tlbA и 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-loop to one-hot кодирует каждую переменную таблицы и добавляет ее в новую таблицу, содержащую закодированные данные.

    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 и 0 во всех остальных переменных.

    Представлен в R2020b