fitsemiself

Пометьте данные с помощью полуконтролируемого самометода обучения

    Описание

    fitsemiself создает полуконтролируемую самоучебную модель, данную маркированные данные, метки и непомеченные данные. Возвращенная модель содержит подходящие метки для непомеченных данных и соответствующих баллов. Эта модель может также предсказать метки для невидимых данных с помощью predict объектная функция. Для получения дополнительной информации об алгоритме маркировки см. Алгоритмы.

    пример

    Mdl = fitsemiself(Tbl,ResponseVarName,UnlabeledTbl) использует маркированные данные в Tbl, где Tbl.ResponseVarName содержит метки для маркированных данных и возвращает адаптированные метки для непомеченных данных в UnlabeledTbl. Функция хранит приспособленные метки и соответствующие баллы в FittedLabels и LabelScores свойства объекта Mdl, соответственно.

    Mdl = fitsemiself(Tbl,formula,UnlabeledTbl) использование formula задавать переменную отклика (вектор из меток) и переменные предикторы, чтобы использовать среди переменных в Tbl. Функция использует эти переменные, чтобы пометить данные в UnlabeledTbl.

    Mdl = fitsemiself(Tbl,Y,UnlabeledTbl) использует данные о предикторе в Tbl и метки в Y пометить данные в UnlabeledTbl.

    пример

    Mdl = fitsemiself(X,Y,UnlabeledX) использует данные о предикторе в X и метки в Y пометить данные в UnlabeledX.

    пример

    Mdl = fitsemiself(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно задать тип ученика, количество итераций, и выиграть порог, чтобы использовать в алгоритме маркировки.

    Примеры

    свернуть все

    Подгонка помечает к непомеченным данным при помощи полуконтролируемого самометода обучения.

    Случайным образом сгенерируйте 60 наблюдений за маркированными данными с 20 наблюдениями в каждом из трех классов.

    rng('default') % For reproducibility
    
    labeledX = [randn(20,2)*0.25 + ones(20,2);
                randn(20,2)*0.25 - ones(20,2);
                randn(20,2)*0.5];
    Y = [ones(20,1); ones(20,1)*2; ones(20,1)*3];

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

    scatter(labeledX(:,1),labeledX(:,2),[],Y,'filled')
    title('Labeled Data')

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

    unlabeledX = [randn(100,2)*0.25 + ones(100,2);
                  randn(100,2)*0.25 - ones(100,2);
                  randn(100,2)*0.5];
    trueLabels = [ones(100,1); ones(100,1)*2; ones(100,1)*3];

    Подгонка помечает к непомеченным данным при помощи полуконтролируемого самометода обучения. Функциональный fitsemiself возвращает SemiSupervisedSelfTrainingModel возразите чей FittedLabels свойство содержит подходящие метки для непомеченных данных и чей LabelScores свойство содержит связанные оценки метки.

    Mdl = fitsemiself(labeledX,Y,unlabeledX)
    Mdl = 
      SemiSupervisedSelfTrainingModel with properties:
    
                 FittedLabels: [300x1 double]
                  LabelScores: [300x3 double]
                   ClassNames: [1 2 3]
                 ResponseName: 'Y'
        CategoricalPredictors: []
                      Learner: [1x1 classreg.learning.classif.CompactClassificationECOC]
    
    
      Properties, Methods
    
    
    

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

    maxLabelScores = max(Mdl.LabelScores,[],2);
    rescaledScores = rescale(maxLabelScores,0.05,0.95);
    scatter(unlabeledX(:,1),unlabeledX(:,2),[],Mdl.FittedLabels,'filled', ...
        'MarkerFaceAlpha','flat','AlphaData',rescaledScores);
    title('Fitted Labels for Unlabeled Data')

    Определите точность маркировки при помощи истинных меток для непомеченных данных.

    numWrongLabels = sum(trueLabels ~= Mdl.FittedLabels)
    numWrongLabels = 8
    

    Только 8 из этих 300 наблюдений в unlabeledX mislabeled.

    Подгонка помечает к непомеченным данным при помощи полуконтролируемого самометода обучения. Укажите, что тип ученика раньше соответствовал меткам.

    Загрузите carsmall набор данных. Составьте таблицу от переменных Acceleration, Displacement, и так далее. Для каждого наблюдения или строки в таблице, обрабатывают Cylinders значение как метка для того наблюдения.

    load carsmall
    Tbl = table(Acceleration,Displacement,Horsepower,Weight,Cylinders);

    Предположим, что только 20% наблюдений помечены. Воссоздать этот сценарий, случайным образом демонстрационные 20 помеченных наблюдений и сохранить их в таблице unlabeledTbl. Удалите метку из остальной части наблюдений и сохраните их в таблице unlabeledTbl. Чтобы проверить точность метки, соответствующей в конце примера, сохраните истинные метки для непомеченных данных в переменной trueLabels.

    rng('default') % For reproducibility of the sampling
    [labeledTbl,Idx] = datasample(Tbl,20,'Replace',false);
    
    unlabeledTbl = Tbl;
    unlabeledTbl(Idx,:) = [];
    trueLabels = unlabeledTbl.Cylinders;
    unlabeledTbl.Cylinders = [];

    Подгонка помечает к непомеченным данным при помощи полуконтролируемого самометода обучения. Используйте мультикласс модель SVM (ECOC), чтобы итеративно пометить непомеченные наблюдения. Задайте, чтобы стандартизировать числовые предикторы и использовать линейную функцию ядра для бинарных учеников SVM. Функциональный fitsemiself возвращает объект чей FittedLabels свойство содержит подходящие метки для непомеченных данных.

    Mdl = fitsemiself(labeledTbl,'Cylinders',unlabeledTbl, ...
        'Learner',templateECOC('Learner',templateSVM('Standardize',true, ...
        'KernelFunction','linear')));
    fittedLabels = Mdl.FittedLabels;

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

    wrongIdx = (trueLabels ~= fittedLabels);
    wrongTbl = unlabeledTbl(wrongIdx,:);

    Визуализируйте подходящие результаты метки для непомеченных данных. Наблюдения Mislabeled окружены в графике.

    gscatter(unlabeledTbl.Displacement,unlabeledTbl.Weight, ...
        fittedLabels)
    hold on
    plot(wrongTbl.Displacement,wrongTbl.Weight, ...
        'ko','MarkerSize',8)
    xlabel('Displacement')
    ylabel('Weight')
    legend('4 cylinders','6 cylinders','8 cylinders','Mislabeled')
    title('Fitted Labels for Unlabeled Data')

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

    свернуть все

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

    Если Tbl содержит переменную отклика, и вы хотите использовать все остающиеся переменные в Tbl как предикторы, затем задайте переменную отклика с помощью ResponseVarName.

    Если Tbl содержит переменную отклика, и вы хотите использовать только подмножество остающихся переменных в Tbl как предикторы, задайте формулу с помощью formula.

    Если Tbl не содержит переменную отклика, задает переменную отклика с помощью Y. Длина переменной отклика и количество строк в Tbl должно быть равным.

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

    Непомеченные выборочные данные в виде таблицы. Каждая строка UnlabeledTbl соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. UnlabeledTbl должен содержать те же предикторы как содержавшиеся в Tbl.

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

    Имя переменной отклика в виде имени переменной в Tbl. Переменная отклика содержит метки класса для выборочных данных в Tbl.

    Необходимо задать ResponseVarName как вектор символов или строковый скаляр. Например, если переменная отклика Y хранится как Tbl.Y, затем задайте его как 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Y, как предикторы.

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

    Хорошая практика должна задать порядок классов при помощи ClassNames аргумент пары "имя-значение".

    Типы данных: char | string

    Объяснительная модель переменной отклика и подмножество переменных предикторов в виде вектора символов или строкового скаляра в форме 'Y~X1+X2+X3'. В этой форме, Y представляет переменную отклика и X1x2 , и X3 представляйте переменные предикторы.

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

    Имена переменных в формуле должны быть оба именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB®.

    Можно проверить имена переменных в Tbl при помощи isvarname функция. Следующий код возвращает логический 1 TRUE) для каждой переменной, которая имеет допустимое имя переменной.

    cellfun(@isvarname,Tbl.Properties.VariableNames)
    Если имена переменных в Tbl не допустимы, затем преобразуют их при помощи matlab.lang.makeValidName функция.
    Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);

    Типы данных: char | string

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

    • Если Y символьный массив, затем каждый элемент меток класса должен соответствовать одной строке массива.

    • Длина Y должно быть равно количеству строк в Tbl или X.

    • Хорошая практика должна задать порядок класса при помощи ClassNames аргумент пары "имя-значение".

    Типы данных: single | double | categorical | logical | char | string | cell

    Помеченные данные о предикторе в виде числовой матрицы.

    По умолчанию, каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одному предиктору.

    Длина Y и количество наблюдений в X должно быть равным.

    Задавать имена предикторов в порядке их внешнего вида в X, используйте PredictorNames аргумент пары "имя-значение".

    Типы данных: single | double

    Непомеченные данные о предикторе в виде числовой матрицы. По умолчанию, каждая строка UnlabeledX соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. UnlabeledX должен иметь те же предикторы как X, в том же порядке.

    Типы данных: single | double

    Примечание

    Программное обеспечение обрабатывает NaN, пустой символьный вектор (''), пустая строка (""), <missing>, и <undefined> элементы как недостающие данные. Удаляет ли программное обеспечение наблюдения с отсутствующими значениями, зависит от базового типа классификатора (Learner).

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

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

    Пример: fitsemiself(Tbl,'Y',UnlabeledTbl,'Learner',templateSVM('Standardize',true),'IterationLimit',2e3) задает, чтобы использовать бинарного ученика машины опорных векторов (SVM), стандартизировать числовые предикторы и запустить максимум 2 000 итераций.

    Базовый тип классификатора в виде разделенной запятой пары, состоящей из 'Learner' и одно из значений в этой таблице.

    ЗначениеОписание
    'discriminant' или templateDiscriminant объектКлассификатор дискриминантного анализа
    templateECOC объектМодель выходных кодов с коррекцией ошибок (ECOC) мультикласса — templateECOC('Learners',templateSVM('KernelFunction','gaussian')) значение по умолчанию для классификации мультиклассов.
    templateEnsemble объектМодель классификации ансамблей
    'kernel' или templateKernel объектМодель классификации ядер (только для бинарной классификации)
    'knn' или templateKNN объектмодель k - ближайших соседей
    'linear' или templateLinear объектЛинейная модель классификации (только для бинарной классификации)
    'svm' или templateSVM объектКлассификатор машины опорных векторов (SVM) (только для бинарной классификации) — templateSVM('KernelFunction','gaussian') значение по умолчанию для бинарной классификации.
    'tree' или templateTree объектДерево классификации выборов из двух альтернатив

    Пример: 'Learner','tree'

    Пример: 'Learner',templateEnsemble('AdaBoostM1',100,'tree')

    Максимальное количество самоучебных итераций в виде разделенной запятой пары, состоящей из 'IterationLimit' и положительный целочисленный скаляр. fitsemiself функция возвращает Mdl, который содержит подходящие метки и баллы, когда этот предел достигнут, даже если алгоритм не сходится.

    Пример: 'IterationLimit',2e3

    Типы данных: single | double

    Выиграйте порог за подходящие метки в виде разделенной запятой пары, состоящей из 'ScoreThreshold' и числовой скаляр. В каждой итерации алгоритма программное обеспечение делает предсказания метки для непомеченных наблюдений при помощи заданного Learner, и вычисляет музыку к этим предсказаниям. Непомеченные наблюдения с баллами предсказания, больше, чем или равный порогу счета, обработаны как помеченные наблюдения в следующей итерации, где метка является предсказанной меткой. По умолчанию, ScoreThreshold 0.1 для бинарной классификации и –0.1 для классификации мультиклассов.

    Пример: 'ScoreThreshold',0.2

    Типы данных: single | double

    Категориальные предикторы перечисляют в виде разделенной запятой пары, состоящей из 'CategoricalPredictors' и одно из значений в этой таблице. Описания принимают, что данные о предикторе имеют наблюдения в строках и предикторы в столбцах.

    ЗначениеОписание
    Вектор из положительных целых чиселКаждая запись в векторе является значением индекса, соответствующим столбцу данных о предикторе, которые содержат категориальную переменную.
    Логический векторtrue запись означает, что соответствующий столбец данных о предикторе является категориальной переменной.
    Символьная матрицаКаждая строка матрицы является именем переменного предиктора. Имена должны совпадать с записями в PredictorNames. Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину.
    Массив строк или массив ячеек из символьных векторовКаждым элементом в массиве является имя переменного предиктора. Имена должны совпадать с записями в PredictorNames.
    'all'Все предикторы являются категориальными.

    По умолчанию, если данные о предикторе находятся в таблице, fitsemiself принимает, что переменная является категориальной, если это - логический вектор, категориальный вектор, символьный массив, массив строк или массив ячеек из символьных векторов. Однако ученики, которые используют деревья решений, принимают, что математически упорядоченные категориальные векторы являются непрерывными переменными. Если данные о предикторе являются матрицей, fitsemiself принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их при помощи 'CategoricalPredictors' аргумент пары "имя-значение".

    Для получения дополнительной информации о том, как различные подходящие функции и, поэтому, различные ученики обрабатывают категориальные предикторы, видят Автоматическое Создание Фиктивных Переменных.

    Пример: 'CategoricalPredictors','all'

    Типы данных: single | double | logical | char | string | cell

    Имена классов, чтобы использовать для маркировки в виде разделенной запятой пары, состоящей из 'ClassNames' и категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов. ClassNames должен иметь совпадающий тип данных как Y.

    Если ClassNames символьный массив, затем каждый элемент должен соответствовать одной строке массива.

    Используйте 'ClassNames' к:

    • Закажите классы.

    • Задайте порядок любой размерности аргумента ввода или вывода, которая соответствует порядку класса. Например, используйте 'ClassNames' задавать порядка следования столбцов классификационных оценок в Mdl.LabelScores.

    • Выберите подмножество классов для маркировки. Например, предположите что набор всех отличных имен классов в Y {'a','b','c'}. Обучать базовый классификатор Learner использование наблюдений от классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

    Значение по умолчанию для ClassNames набор всех отличных имен классов в Y.

    Пример: 'ClassNames',{'b','g'}

    Типы данных: categorical | char | string | logical | single | double | cell

    Переменный предиктор называет в виде разделенной запятой пары, состоящей из 'PredictorNames' и массив строк уникальных имен или массив ячеек уникальных векторов символов. Функциональность 'PredictorNames' зависит от способа, которым вы снабжаете данными о предикторе.

    • Если вы предоставляете XY, и UnlabeledX, затем можно использовать 'PredictorNames' присваивать имена к переменным предикторам в X и UnlabeledX.

      • Порядок имен в PredictorNames должен соответствовать порядку следования столбцов X. Принятие, что X имеет ориентацию по умолчанию, с наблюдениями в строках и предикторами в столбцах, PredictorNames{1} имя X(:,1), PredictorNames{2} имя X(:,2), и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

      • По умолчанию, PredictorNames {'x1','x2',...}.

    • Если вы предоставляете Tbl и UnlabeledTbl, затем можно использовать 'PredictorNames' выбрать который переменные предикторы использовать. Таким образом, fitsemiself использование только переменные предикторы в PredictorNames и переменная отклика, чтобы пометить непомеченные данные.

      • PredictorNames должно быть подмножество Tbl.Properties.VariableNames и не может включать имя переменной отклика.

      • По умолчанию, PredictorNames содержит имена всех переменных предикторов.

      • Хорошая практика должна задать предикторы с помощью любого 'PredictorNames' или formula, но не то и другое одновременно.

    Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

    Типы данных: string | cell

    Имя переменной отклика в виде разделенной запятой пары, состоящей из 'ResponseName' и вектор символов или строковый скаляр.

    • Если вы предоставляете Y, затем можно использовать 'ResponseName' задавать имя для переменной отклика.

    • Если вы предоставляете ResponseVarName или formula, затем вы не можете использовать 'ResponseName'.

    Пример: 'ResponseName','response'

    Типы данных: char | string

    Количество интервалов для числовых предикторов в виде разделенной запятой пары, состоящей из 'NumBins' и положительный целочисленный скаляр.

    • Если 'NumBins' значение пусто (значение по умолчанию), затем программное обеспечение не делает интервала никакие предикторы.

    • Если вы задаете 'NumBins' значение как положительный целочисленный скаляр, затем интервалы программного обеспечения каждый числовой предиктор в конкретное количество равновероятных интервалов, и затем выращивает деревья на индексах интервала вместо исходных данных.

      • Если 'NumBins' значение превышает номер (u) уникальных значений для предиктора, затем fitsemiself интервалы предиктор в интервалы u.

      • fitsemiself не делает интервала категориальные предикторы.

      Когда вы используете большой набор данных, эта опция раскладывания ускоряет обучение классификатора, но вызывает потенциальное уменьшение в точности. Можно попробовать 'NumBins',50 во-первых, и затем измените 'NumBins' значение в зависимости от точности и учебной скорости.

    Примечание

    Этот аргумент допустим только когда Learner значение является a templateECOC или templateEnsemble возразите что ученики дерева использования.

    Пример: 'NumBins',50

    Типы данных: single | double

    Размерность наблюдения для данных о предикторе X и UnlabeledXВ виде разделенной запятой пары, состоящей из 'ObservationsIn' и 'rows' или 'columns'. Для линейных моделей классификации, если вы ориентируете X и UnlabeledX так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', затем можно испытать сокращение во время выполнения.

    Примечание

    'columns' значение допустимо только когда Learner значение является бинарной линейной моделью классификации ('linear' или templateLinear) или модель ECOC с линейными бинарными учениками (например, templateECOC('Learners','linear').

    Пример: 'ObservationsIn','columns'

    Типы данных: char | string

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

    свернуть все

    Полуконтролируемый самоучебный классификатор, возвращенный как SemiSupervisedSelfTrainingModel объект. Используйте запись через точку, чтобы получить доступ к свойствам объектов. Например, чтобы получить подходящие метки для непомеченных данных и их соответствующих баллов, введите Mdl.FittedLabels и Mdl.LabelScores, соответственно.

    Алгоритмы

    Алгоритм начинает по образованию заданный пользователями классификатор (Learner), сначала обученный на одних только маркированных данных, и затем использует тот классификатор, чтобы сделать предсказания метки для непомеченных данных. Затем алгоритм обеспечивает музыку к предсказаниям, и затем обрабатывает предсказания как истинные метки для следующего учебного цикла классификатора, если баллы выше порога (ScoreThreshold). Этот процесс повторения до предсказаний метки сходится или предел итерации (IterationLimit) достигнут.

    Ссылки

    [1] Эбни, Стивен. “Изучая Алгоритм Yarowsky”. Компьютерная лингвистика 30, № 3 (сентябрь 2004): 365–95. https://doi.org/10.1162/0891201041850876.

    [2] Yarowsky, Дэвид. “Безнадзорное Разрешение неоднозначности Смысла слова, Конкурирующее с Контролируемыми Методами”. Продолжения 33-го Годового собрания Ассоциации для Компьютерной лингвистики, 189–96. Кембридж, Массачусетс: Ассоциация для Компьютерной лингвистики, 1995. https://doi.org/10.3115/981658.981684.

    Введенный в R2020b