splitlabels

Найдите, что индексы разделяют метки согласно заданным пропорциям

Описание

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

пример

idxs = splitlabels(lblsrc,p) находит логические индексы, которые разделяют метки в lblsrc на основе пропорций или количества меток, заданных в p.

пример

idxs = splitlabels(lblsrc,p,'randomized') случайным образом присваивает заданную пропорцию значений метки к каждому набору индекса в idxs.

пример

idxs = splitlabels(___,Name,Value) задает дополнительные входные параметры с помощью пар "имя-значение". Например, 'UnderlyingDatastoreIndex',3 разделяет метки только в третьем базовом datastore объединенного datastore.

Примеры

свернуть все

Сонеты Рида Уильяма Шекспира с fileread функция. Извлеките все гласные из текста и преобразуйте их в нижний регистр.

sonnets = fileread("sonnets.txt");
vowels = lower(sonnets(regexp(sonnets,"[AEIOUaeiou]")))';

Считайте количество экземпляров каждого гласного.

cnts = countlabels(vowels)
cnts=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a      4940     18.368 
      e      9028     33.569 
      i      4895     18.201 
      o      5710     21.232 
      u      2321     8.6302 

Разделите гласные в набор обучающих данных, содержащий 500 экземпляров каждого гласного, набор валидации, содержащий 300 и набор тестирования с остальными. Все гласные представлены равными весами в первых двух наборах, но не в третьем.

spltn = splitlabels(vowels,[500 300]);

for kj = 1:length(spltn)
    cntsn{kj} = countlabels(vowels(spltn{kj}));
end
cntsn{:}
ans=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a       500       20   
      e       500       20   
      i       500       20   
      o       500       20   
      u       500       20   

ans=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a       300       20   
      e       300       20   
      i       300       20   
      o       300       20   
      u       300       20   

ans=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a      4140     18.083 
      e      8228      35.94 
      i      4095     17.887 
      o      4910     21.447 
      u      1521     6.6437 

Разделите гласные в набор обучающих данных, содержащий 50% экземпляров, набор валидации, содержащий еще 30% и набор тестирования с остальными. Все гласные представлены тем же весом через все три набора.

spltp = splitlabels(vowels,[0.5 0.3]);

for kj = 1:length(spltp)
    cntsp{kj} = countlabels(vowels(spltp{kj}));
end
cntsp{:}
ans=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a      2470     18.367 
      e      4514     33.566 
      i      2448     18.203 
      o      2855      21.23 
      u      1161     8.6333 

ans=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a      1482     18.371 
      e      2708     33.569 
      i      1468     18.198 
      o      1713     21.235 
      u       696     8.6277 

ans=5×3 table
    Label    Count    Percent
    _____    _____    _______

      a       988     18.368 
      e      1806     33.575 
      i       979       18.2 
      o      1142     21.231 
      u       464     8.6261 

Сонеты Рида Уильяма Шекспира с fileread функция. Удалите все неалфавитные символы из текста и преобразуйте их в нижний регистр.

sonnets = fileread("sonnets.txt");
letters = lower(sonnets(regexp(sonnets,"[A-z]")))';

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

type = repmat("consonant",size(letters));
type(regexp(letters',"[aeiou]")) = "vowel";

T = table(letters,type,'VariableNames',["Letter" "Type"]);
head(T)
ans=8×2 table
    Letter       Type    
    ______    ___________

      t       "consonant"
      h       "consonant"
      e       "vowel"    
      s       "consonant"
      o       "vowel"    
      n       "consonant"
      n       "consonant"
      e       "vowel"    

Отобразите количество экземпляров каждой категории.

cnt = countlabels(T,'TableVariable',"Type")
cnt=2×3 table
      Type       Count    Percent
    _________    _____    _______

    consonant    46516    63.365 
    vowel        26894    36.635 

Разделите таблицу в два набора, один содержащий 60% согласных и гласных и другого содержащего 40%. Отобразите количество экземпляров каждой категории.

splt = splitlabels(T,0.6,'TableVariable',"Type");

sixty = countlabels(T(splt{1},:),'TableVariable',"Type")
sixty=2×3 table
      Type       Count    Percent
    _________    _____    _______

    consonant    27910    63.366 
    vowel        16136    36.634 

forty = countlabels(T(splt{2},:),'TableVariable',"Type")
forty=2×3 table
      Type       Count    Percent
    _________    _____    _______

    consonant    18606    63.363 
    vowel        10758    36.637 

Разделите таблицу в два набора, один содержащий 60% каждой конкретной буквы и другого содержащего 40%. Исключите букву Y, которая иногда действует как согласный и иногда как гласный. Отобразите количество экземпляров каждой категории.

splt = splitlabels(T,0.6,'Exclude',"y");

sixti = countlabels(T(splt{1},:),'TableVariable',"Type")
sixti=2×3 table
      Type       Count    Percent
    _________    _____    _______

    consonant    26719    62.346 
    vowel        16137    37.654 

forti = countlabels(T(splt{2},:),'TableVariable',"Type")
forti=2×3 table
      Type       Count    Percent
    _________    _____    _______

    consonant    17813    62.349 
    vowel        10757    37.651 

Разделите таблицу в два набора, одного размера. Включайте только буквы E и s. Рандомизируйте наборы.

halves = splitlabels(T,0.5,'randomized','Include',["e" "s"]);

cnt = countlabels(T(halves{1},:))
cnt=2×3 table
    Letter    Count    Percent
    ______    _____    _______

      e       4514     64.385 
      s       2497     35.615 

Создайте набор данных, который состоит из 100 Гауссовых случайных чисел. Маркируйте 40 чисел как A, 30 как B, и 30 как C. Храните данные в объединенном datastore, содержащем два хранилища данных. Первый datastore имеет данные, и второй datastore содержит метки.

dsData = arrayDatastore(randn(100,1));
dsLabels = arrayDatastore([repmat("A",40,1); repmat("B",30,1); repmat("C",30,1)]);
dsDataset = combine(dsData,dsLabels);
cnt = countlabels(dsDataset,'UnderlyingDatastoreIndex',2)
cnt=3×3 table
    Label    Count    Percent
    _____    _____    _______

      A       40        40   
      B       30        30   
      C       30        30   

Разделите набор данных в два набора, один содержащий 60% чисел и другого с остальными.

splitIndices = splitlabels(dsDataset,0.6,'UnderlyingDatastoreIndex',2);

dsDataset1 = subset(dsDataset,splitIndices{1});
cnt1 = countlabels(dsDataset1,'UnderlyingDatastoreIndex',2)
cnt1=3×3 table
    Label    Count    Percent
    _____    _____    _______

      A       24        40   
      B       18        30   
      C       18        30   

dsDataset2 = subset(dsDataset,splitIndices{2});
cnt2 = countlabels(dsDataset2,'UnderlyingDatastoreIndex',2)
cnt2=3×3 table
    Label    Count    Percent
    _____    _____    _______

      A       16        40   
      B       12        30   
      C       12        30   

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

свернуть все

Введите источник метки в виде одного из них:

  • Категориальный вектор.

  • Вектор строки или массив ячеек из символьных векторов.

  • Числовой вектор или массив ячеек числовых скаляров.

  • Логический вектор или массив ячеек логических скаляров.

  • Таблица с переменными, содержащими любой из предыдущих типов данных.

  • Datastore, чей readall функция возвращает любой из предыдущих типов данных.

  • CombinedDatastore объект, содержащий базовый datastore, чей readall функция возвращает любой из предыдущих типов данных. В этом случае необходимо задать индекс базового datastore, который имеет значения метки.

lblsrc должен содержать метки, которые могут быть преобразованы в вектор с дискретным набором категорий.

Пример: lblsrc = categorical(["B" "C" "A" "E" "B" "A" "A" "B" "C" "A"],["A" "B" "C" "D"]) создает источник метки как категориальный вектор с десятью выборками с четырьмя категориями: ABC, и D.

Пример: lblsrc = [0 7 2 5 11 17 15 7 7 11] создает источник метки как числовой вектор с десятью выборками.

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

Пропорции или количества меток в виде целочисленного скаляра, скаляра в области значений (0, 1), вектор из целых чисел или вектор из частей.

  • Если p скаляр, splitlabels находит, что два разделяющих индекса устанавливают и возвращают двухэлементный массив ячеек в idxs.

    • Если p целое число, первый элемент idxs содержит вектор из индексов, указывающих на первый p значения каждой категории меток. Второй элемент idxs содержит индексы, указывающие на остающиеся значения каждой категории меток.

    • Если p значение в области значений (0, 1) и lblsrc имеет элементы Ki в i th категория, первый элемент idxs содержит вектор из индексов, указывающих на первый p × значения Ki каждой категории меток. Второй элемент idxs содержит индексы остающихся значений каждой категории меток.

  • Если p вектор с элементами N формы p 1, p 2, …, pN, splitlabels находит N +, 1 разделяющий индекс устанавливает и возвращается (N + 1) - массив ячеек элемента в idxs.

    • Если p вектор из целых чисел, первый элемент idxs вектор из индексов, указывающих на первый p 1 значение каждой категории меток, следующий элемент idxs содержит следующий p 2 значения каждой категории меток, и так далее. Последний элемент в idxs содержит остающиеся индексы каждой категории меток.

    • Если p вектор из частей и lblsrc имеет элементы Ki i th категория, первый элемент idxs вектор из индексов, конкатенирующих первый p 1 × значение Ki каждой категории, следующий элемент idxs содержит следующий p 2 × K i значений каждой категории меток, и так далее. Последний элемент в idxs содержит остающиеся индексы каждой категории меток.

Примечание

  • Если p содержит части, затем сумма его элементов не должна быть больше того.

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

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'TableVariable',"AreaCode",'Exclude',["617" "508"] указывает, что функциональные метки разделения на основе телефонного кода области и исключают числа из Бостона и Натика.

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

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

Табличная переменная, чтобы читать в виде вектора символов или строкового скаляра. Если этот аргумент не задан, то splitlabels использует первую табличную переменную.

Базовый индекс datastore в виде целочисленного скаляра. Этот аргумент применяется когда lblsrc CombinedDatastore объект. splitlabels считает метки в datastore полученными с помощью UnderlyingDatastores свойство lblsrc.

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

свернуть все

Разделение индексов, возвращенных как массив ячеек.

Введенный в R2021a