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(classes)
    ans = 4×1 cell    
    'blue'       
    'green'      
    'red'        
    'yellow'     
    

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

    labels = onehotencode(color,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
    

    Каждое наблюдение в метках является теперь вектором-строкой с 1 в положении, соответствующем категории метки класса и 0 во всех других положениях. Категории закодированы в том же порядке как категории, такие что 1 в положении 1 представляет категорию кулака в списке, в этом случае, 'blue'.

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

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

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

    Одногорячий кодируют таблицу меток класса.

    color = onehotencode(color)
    color = 
        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    
         1   NaN     0     1     0     0
         0   NaN     1     0     1     0
         0   NaN     0     0     0     1
    

    Наблюдения за классом, не существующим в списке классов, чтобы закодировать, закодированы к вектору из 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);

    Одногорячий кодируют матрицу сегментации в массив одного типа. Расширьте закодированные метки в третью размерность.

    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 = 
        color     pets    location
        ______    ____    ________
    
        blue      dog       USA   
        red       fish      CAN   
        blue      cat       CAN   
        green     dog       USA   
        yellow    cat       USA   
        red       bird      USA   
    
    

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

    encData = table();
    
    for i=1:width(data)
     encData = [encData onehotencode(data(:,i))];
    end
    
    encData
    encData = 
        blue    green    red    yellow    bird    cat    dog    fish    CAN    USA
        ____    _____    ___    ______    ____    ___    ___    ____    ___    ___
    
         1        0       0       0        0       0      1      0       0      1 
         0        0       1       0        0       0      0      1       1      0 
         1        0       0       0        0       1      0      0       1      0 
         0        1       0       0        0       0      1      0       0      1 
         0        0       0       1        0       1      0      0       0      1 
         0        0       1       0        1       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