exponenta event banner

splitlabels

Поиск индексов для разделения меток в соответствии с заданными пропорциями

Описание

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

пример

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

пример

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

пример

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

Примеры

свернуть все

Читайте сонеты Уильяма Шекспира с 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. Храните данные в объединенном хранилище данных, содержащем два хранилища данных. Первое хранилище данных содержит данные, а второе хранилище данных содержит метки.

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   

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

свернуть все

Источник входной метки, указанный как один из следующих:

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

  • Строковый вектор или клеточный массив символьных векторов.

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

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

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

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

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

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

Пример: lblsrc = categorical(["B" "C" "A" "E" "B" "A" "A" "B" "C" "A"],["A" "B" "C" "D"]) создает источник метки в виде категориального вектора из десяти выборок с четырьмя категориями: A, B, C, и 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-ой категории, первый элемент idxs содержит вектор индексов, указывающий на первый p Значения × Ki каждой категории меток. Второй элемент idxs содержит индексы оставшихся значений каждой категории меток.

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

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

    • Если p является вектором дробей и lblsrc имеет элементы Ki i-ой категории, первый элемент idxs - вектор индексов, объединяющих первые значения p1 × Ki каждой категории, следующий элемент idxs содержит следующие значения p2 × Ki каждой категории меток и т.д. Последний элемент в 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 использует первую табличную переменную.

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

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

свернуть все

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

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