Данные этикеток с использованием полупроверенного метода самотренировки
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 имеют неправильную маркировку.
Подгонка меток к немеченым данным с помощью полуинспектируемого метода самостоятельного обучения. Укажите тип учащегося, который будет соответствовать меткам.
Загрузить 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')

Tbl - Помеченные данные образцаДанные образца, помеченные как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. Дополнительно, Tbl может содержать один дополнительный столбец для переменной ответа (вектор меток). Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не поддерживаются.
Если Tbl содержит переменную ответа, и вы хотите использовать все оставшиеся переменные в Tbl в качестве предикторов, затем укажите переменную ответа, используя ResponseVarName.
Если Tbl содержит переменную ответа, и требуется использовать только подмножество остальных переменных в Tbl в качестве предикторов укажите формулу, используя formula.
Если Tbl не содержит переменную ответа, укажите переменную ответа, используя Y. Длина переменной ответа и количество строк в Tbl должно быть равным.
Типы данных: table
UnlabeledTbl - Немаркированные данные образцаНемаркированные данные образца, указанные как таблица. Каждая строка UnlabeledTbl соответствует одному наблюдению, и каждый столбец соответствует одному предиктору. UnlabeledTbl должны содержать те же предикторы, что и содержащиеся в Tbl.
Типы данных: table
ResponseVarName - Имя переменной ответаTblИмя переменной ответа, указанное как имя переменной в Tbl. Переменная ответа содержит метки классов для образца данных в Tbl.
Необходимо указать ResponseVarName в виде вектора символов или строкового скаляра. Например, если переменная ответа Y хранится как Tbl.Y, затем укажите его как 'Y'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Y, как предикторы.
Переменная ответа должна быть категориальным, символьным или строковым массивом, логическим или числовым вектором или массивом ячеек символьных векторов. Если Y является символьным массивом, то каждый элемент переменной ответа должен соответствовать одной строке массива.
Рекомендуется указывать порядок классов с помощью ClassNames аргумент пары имя-значение.
Типы данных: char | string
formula - Пояснительная модель переменной ответа и подмножество переменных предиктораПояснительная модель переменной ответа и подмножество переменных предиктора, указанное как вектор символов или строковый скаляр в форме '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 является символьным массивом, то каждый элемент меток класса должен соответствовать одной строке массива.
Рекомендуется указать порядок классов с помощью ClassNames аргумент пары имя-значение.
Типы данных: single | double | categorical | logical | char | string | cell
X - Помеченные данные предиктораПомеченные данные предиктора, указанные как числовая матрица.
По умолчанию каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одному предиктору.
Длина Y и число замечаний в X должно быть равным.
Чтобы указать имена предикторов в порядке их появления в X, используйте PredictorNames аргумент пары имя-значение.
Типы данных: single | double
UnlabeledX - Немаркированные данные предиктораНемаркированные данные предиктора, указанные как числовая матрица. По умолчанию каждая строка 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' - Базовый тип классификатора'svm' | 'discriminant' | 'kernel' | 'knn' | 'linear' | 'naivebayes' | 'tree' | ...Базовый тип классификатора, указанный как разделенная запятыми пара, состоящая из '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' - Максимальное количество итераций самообучения1e3 (по умолчанию) | целочисленный скалярМаксимальное количество итераций самообучения, указанное как пара, разделенная запятыми, состоящая из 'IterationLimit' и положительный целочисленный скаляр. fitsemiself функция возвращает Mdl, который содержит подогнанные метки и баллы, когда этот предел достигнут, даже если алгоритм не сходится.
Пример: 'IterationLimit',2e3
Типы данных: single | double
'ScoreThreshold' - Пороговое значение оценки для установленных этикетокПороговое значение оценки для установленных меток, указанное как пара, разделенная запятыми, состоящая из 'ScoreThreshold' и числовой скаляр. При каждой итерации алгоритма программное обеспечение делает прогнозы меток для немеченых наблюдений с использованием указанного Learnerи вычисляет баллы для этих прогнозов. Немаркированные наблюдения с оценками прогнозирования, большими или равными порогу оценки, рассматриваются как помеченные наблюдения в следующей итерации, где метка является предсказанной меткой. По умолчанию ScoreThreshold является 0.1 для двоичной классификации и –0.1 для мультиклассовой классификации.
Пример: 'ScoreThreshold',0.2
Типы данных: single | double
'CategoricalPredictors' - Список категориальных предикторов'all'Список категориальных предикторов, указанный как одно из значений в этой таблице. В описаниях предполагается, что данные предиктора имеют наблюдения в строках и предикторы в столбцах.
| Стоимость | Описание |
|---|---|
| Вектор положительных целых чисел |
Каждая запись в векторе представляет собой значение индекса, соответствующее столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся в диапазоне от 1 до Если |
| Логический вектор |
A |
| Символьная матрица | Каждая строка матрицы является именем предикторной переменной. Имена должны соответствовать записям в PredictorNames. Поместите имена с дополнительными пробелами, чтобы каждая строка символьной матрицы имела одинаковую длину. |
| Строковый массив или массив ячеек символьных векторов | Каждый элемент массива является именем переменной предиктора. Имена должны соответствовать записям в PredictorNames. |
'all' | Все предикторы категоричны. |
По умолчанию, если данные предиктора находятся в таблице, fitsemiself предполагает, что переменная категорична, если она является логическим вектором, категориальным вектором, символьным массивом, строковым массивом или массивом ячеек символьных векторов. Однако ученики, которые используют деревья решений, предполагают, что математически упорядоченные категориальные векторы являются непрерывными переменными. Если данные предиктора являются матрицей, fitsemiself предполагает, что все предикторы непрерывны. Чтобы определить любые другие предикторы как категориальные предикторы, укажите их с помощью 'CategoricalPredictors' аргумент пары имя-значение.
Дополнительные сведения о том, как различные функции подгонки и, следовательно, разные ученики обращаются с категориальными предикторами, см. в разделе Автоматическое создание фиктивных переменных.
Пример: 'CategoricalPredictors','all'
Типы данных: single | double | logical | char | string | cell
'ClassNames' - Названия классов, используемых для маркировкиИмена классов, используемых для маркировки, указанные как разделенная запятыми пара, состоящая из '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' и строковый массив уникальных имен или массив ячеек уникальных векторов символов. Функциональные возможности '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' и вектор символов или строковый скаляр.
Если вы поставляете Y, то вы можете использовать 'ResponseName' для указания имени переменной ответа.
Если вы поставляете ResponseVarName или formula, то вы не можете использовать 'ResponseName'.
Пример: 'ResponseName','response'
Типы данных: char | string
'NumBins' - Количество ячеек для числовых предикторов[] (по умолчанию) | целочисленный скалярКоличество ячеек для числовых предикторов, указанных как разделенная запятыми пара, состоящая из 'NumBins' и положительный целочисленный скаляр.
Если 'NumBins' пустое значение (по умолчанию), то программное обеспечение не содержит никаких предикторов.
При указании 'NumBins' значение в виде положительного целочисленного скаляра, затем программное обеспечение складывает каждый числовой предиктор в заданное количество четких ячеек, а затем выращивает деревья на индексах ячеек вместо исходных данных.
Если 'NumBins' значение превышает число (u) уникальных значений для предиктора, то fitsemiself помещает предиктор в u бункеров.
fitsemiself не содержит категориальных предикторов.
При использовании большого набора данных этот параметр binning ускоряет обучение классификаторов, но приводит к потенциальному снижению точности. Вы можете попробовать 'NumBins',50 сначала, а затем измените 'NumBins' значение в зависимости от точности и скорости тренировки.
Примечание
Этот аргумент допустим только в том случае, если Learner значение равно templateECOC или templateEnsemble объект, в котором используются учащиеся дерева.
Пример: 'NumBins',50
Типы данных: single | double
'ObservationsIn' - Измерение наблюдения для данных предиктора X и UnlabeledX'rows' (по умолчанию) | 'columns'Измерение наблюдения для данных предиктора X и UnlabeledX, указанная как пара, разделенная запятыми, состоящая из 'ObservationsIn' и 'rows' или 'columns'. Для моделей линейной классификации, если ориентация X и UnlabeledX чтобы наблюдения соответствовали столбцам и указывали 'ObservationsIn','columns', то вы можете испытать сокращение времени выполнения.
Примечание
'columns' допустимо только в том случае, если Learner value - двоичная модель линейной классификации ('linear' или templateLinear) или модель ECOC с линейными двоичными учениками (например, templateECOC('Learners','linear').
Пример: 'ObservationsIn','columns'
Типы данных: char | string
Mdl - Полууправляемый классификатор самообученияSemiSupervisedSelfTrainingModel объектПолууправляемый классификатор самообучения, возвращенный в качестве 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.
fitsemigraph | predict | SemiSupervisedSelfTrainingModel | templateDiscriminant | templateECOC | templateEnsemble | templateKernel | templateKNN | templateLinear | templateSVM | templateTree
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.