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

    Закодируйте метки в одногорячие векторы при помощи onehotencode функция. Расширьте метки в векторы во втором измерении, чтобы закодировать классы. Каждый столбец 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 во всех других положениях. Функция кодирует метки в том же порядке как категории, так, чтобы 1 в положении 1 представляет первую категорию в списке (в этом случае, blue). Например, потому что вторая строка в onehotLabels имеет 1 в первом столбце, то наблюдение находится в blue категория.

    Можно также использовать dummyvar закодировать метки. dummyvar создает фиктивные переменные, которые в этом случае эквивалентны, закодированный маркирует onehotLabels. Для сравнения между функциями onehotencode и dummyvar, см. альтернативную функциональность.

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

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

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

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

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

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

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

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

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

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

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

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

    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 соответствует уникальному классу. Задайте классы, чтобы закодировать.

    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 значения.

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

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

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

    Сравните закодированные данные, созданные при помощи onehotencode к фиктивным переменным, созданным при помощи dummyvar. dummyvar функция не принимает табличные входные параметры. Объедините переменные класса в массив ячеек 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 имейте то же кодирование, но другой тип данных. Для получения дополнительной информации о различиях между onehotencode и dummyvar функции, см. альтернативную функциональность.

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

    свернуть все

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

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

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

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

    Типы данных: categorical | numeric | string

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

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

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

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

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

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

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

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

    • Если вход метки классификации является категориальным массивом, числовым массивом или массивом строк, то закодированные метки возвращены как массив типа данных 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 во всех других переменных.

    Альтернативная функциональность

    Чтобы закодировать метки данных, можно также использовать dummyvar, который создает фиктивные переменные из сгруппированных переменных. Следующая таблица выдерживает сравнение onehotencode и dummyvar функции для различных вариантов использования.

    Вариант использованияКогда использовать onehotencodeКогда использовать dummyvar
    Кодирование нескольких переменныхИспользование onehotencode в цикле. Для примера смотрите Одногорячий, Кодируют Таблицу с Несколькими Переменными. Задайте входной параметр group как массив ячеек или положительная целочисленная матрица. Для примеров смотрите, Создают Фиктивные Переменные из Нескольких Сгруппированных переменных и Создают Фиктивные Переменные из Числовых Сгруппированных переменных.
    Кодирование переменной в формате массива ячеекПреобразуйте переменную массива ячеек в категориальный массив. Задайте входной параметр group как массив ячеек, содержащий одну или несколько сгруппированных переменных.
    Кодирование некатегориальных меток данныхЗадайте метки данных как категориальный массив или задайте классы, чтобы закодировать использование ClassNames аргумент значения имени. Для примера смотрите Одногорячий, Кодируют Подмножество Классов.Вы не должны преобразовывать метки данных, потому что dummyvar принимает некатегориальные сгруппированные переменные как вход.
    Кодирование массива меток данныхЗадайте размерность, чтобы расшириться (featureDim).Программное обеспечение автоматически определяет размерность, чтобы расшириться. dummyvar возвращает фиктивные переменные как числовой массив со столбцами, созданными из столбцов входных сгруппированных переменных.

    Во многих случаях вы не должны использовать onehotencode или dummyvar функция для кодирования. Большинство функций Statistics and Machine Learning Toolbox™ может работать непосредственно с категориальными данными об ответе. Большая часть классификации и функций регрессии также принимают категориальные предикторы.

    Смотрите также

    | | |

    Введенный в R2021b