Маркируйте данные с помощью полууправляемого самометода обучения
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'
аргумент пары "имя-значение".
Для получения дополнительной информации о том, как различные функции подгонки и, следовательно, различные ученики относятся к категориальным предикторам, смотрите Автоматическое создание переменных Dummy.
Пример: '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'
, тогда вы можете испытать сокращение времени выполнения.
Примечание
The 'columns'
значение допустимо только, когда Learner
значение является двоичной линейной классификационной моделью ('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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.