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 функция возвращает любой из предыдущих типов данных.

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

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 элементами вида p 1, p 2,..., pN,splitlabels находит N + 1 разделяющих наборов индексов и возвращает массив ячеек (N + 1) -элемента в idxs.

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

    • Если p является вектором дробей и lblsrc имеет Ki элементов i-й категории, первый элемент 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