exponenta event banner

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

    Figure contains an axes. The axes with title Labeled Data contains an object of type scatter.

    Случайная генерация 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')

    Figure contains an axes. The axes with title Fitted Labels for Unlabeled Data contains an object of type scatter.

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

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

    Только 8 из 300 наблюдений в unlabeledX имеют неправильную маркировку.

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

    Загрузить 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,:);

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

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

    Figure contains an axes. The axes with title Fitted Labels for Unlabeled Data contains 4 objects of type line. These objects represent 4 cylinders, 6 cylinders, 8 cylinders, Mislabeled.

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

    свернуть все

    Данные образца, помеченные как таблица. Каждая строка 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 представляет переменную ответа, и X1, X2, и X3 представляют переменные предиктора.

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

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

    Типы данных: 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) учеником, стандартизацию числовых предикторов и выполнение максимум 2000 итераций.

    Базовый тип классификатора, указанный как разделенная запятыми пара, состоящая из '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

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

    СтоимостьОписание
    Вектор положительных целых чисел

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

    Если fitsemiself использует подмножество входных переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

    Логический вектор

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

    Символьная матрицаКаждая строка матрицы является именем предикторной переменной. Имена должны соответствовать записям в 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' зависит от способа предоставления данных предиктора.

    • Если вы поставляете X, Y, и 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 не содержит категориальных предикторов.

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

    Примечание

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

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

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

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

    Примечание

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

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

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

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

    свернуть все

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

    Алгоритмы

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

    Ссылки

    [1] Абни, Стивен. «Понимание алгоритма Яровского». Вычислительная лингвистика 30, № 3 (сентябрь 2004): 365-95. https://doi.org/10.1162/0891201041850876.

    [2] Яровский, Давид. «Неподконтрольные методы устранения противоречий между словами и чувствами». Материалы 33-го ежегодного собрания Ассоциации вычислительной лингвистики, 189-96. Кембридж, Массачусетс: Ассоциация вычислительной лингвистики, 1995. https://doi.org/10.3115/981658.981684.

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