Полууправляемая графическая модель для классификации
Для маркировки немаркированных данных можно использовать метод на основе полуднадзорных графиков с помощью fitsemigraph функция. Получающееся SemiSupervisedGraphModel объект содержит соответствующие метки для немеченых наблюдений (FittedLabels) и их оценки (LabelScores). Вы также можете использовать SemiSupervisedGraphModel объект в качестве классификатора, обученного как маркированным, так и немаркированным данным, для классификации новых данных с помощью predict функция.
Создать SemiSupervisedGraphModel объект с помощью fitsemigraph.
FittedLabels - Этикетки, устанавливаемые на немеченые данныеЭто свойство доступно только для чтения.
Метки, соответствующие немаркированным данным, указанным как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. FittedLabels имеет тот же тип данных, что и метки класса в переменной ответа в вызове fitsemigraph. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Каждая строка FittedLabels представляет аппроксимированную метку соответствующей строки UnlabeledX или UnlabeledTbl.
Для получения дополнительной информации о том, как fitsemigraph подходит для меток, см. раздел Алгоритмы.
Типы данных: single | double | logical | char | cell | categorical
LabelScores - Оценки для встроенных этикетокЭто свойство доступно только для чтения.
Оценки для соответствующих меток, указанных как числовая матрица. LabelScores имеет размер u-by-K, где u - количество наблюдений (или строк) в немеченых данных, а K - число классов в ClassNames.
score(u,k) вероятность того, что наблюдение u принадлежит классу k, где более высокое значение оценки указывает на более высокую вероятность.
Для получения дополнительной информации о том, как fitsemigraph вычисляет оценки меток, см. раздел Алгоритмы.
Типы данных: double
Method - Техника маркировки'labelpropagation' | 'labelpropagationexact' | 'labelspreading' | 'labelspreadingexact'Это свойство доступно только для чтения.
Метод маркировки, используемый для маркировки немаркированных данных, указанный как 'labelpropagation', 'labelpropagationexact', 'labelspreading', или 'labelspreadingexact'.
Типы данных: char
CategoricalPredictors - Индексы категориального предиктора[]Это свойство доступно только для чтения.
Индексы категориального предиктора, заданные как положительный целочисленный вектор. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).
Типы данных: single | double
ClassNames - Уникальные метки классаЭто свойство доступно только для чтения.
Уникальные метки классов, используемые для маркировки немаркированных данных, указанных как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. Порядок элементов ClassNames определяет порядок классов.
Типы данных: single | double | logical | char | cell | categorical
PredictorNames - Имена переменных предиктораЭто свойство доступно только для чтения.
Имена переменных предиктора, заданные как массив ячеек векторов символов. Порядок элементов PredictorNames соответствует порядку, в котором имена предикторов появляются в данных предиктора.
Типы данных: cell
ResponseName - Имя переменной ответаЭто свойство доступно только для чтения.
Имя ответной переменной, указанное как символьный вектор.
Типы данных: char
predict | Маркировка новых данных с помощью полууправляемого классификатора на основе графов |
Подгонка меток к немаркированным данным с помощью метода на основе полудокументированных графиков.
Случайным образом генерируют 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];Подгонка меток к немеченым данным с помощью метода, основанного на полуконтролированном графике. Функция fitsemigraph возвращает SemiSupervisedGraphModel объект, чей FittedLabels содержит соответствующие метки для немаркированных данных и LabelScores содержит связанные оценки меток.
Mdl = fitsemigraph(labeledX,Y,unlabeledX)
Mdl =
SemiSupervisedGraphModel with properties:
FittedLabels: [300x1 double]
LabelScores: [300x3 double]
ClassNames: [1 2 3]
ResponseName: 'Y'
CategoricalPredictors: []
Method: 'labelpropagation'
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 = 10
Только 10 из 300 наблюдений в unlabeledX имеют неправильную маркировку.
Использовать как помеченные, так и немаркированные данные для обучения SemiSupervisedGraphModel объект. Маркировка новых данных с использованием обученной модели.
Случайным образом генерируют 15 наблюдений помеченных данных с 5 наблюдениями в каждом из трех классов.
rng('default') % For reproducibility labeledX = [randn(5,2)*0.25 + ones(5,2); randn(5,2)*0.25 - ones(5,2); randn(5,2)*0.5]; Y = [ones(5,1); ones(5,1)*2; ones(5,1)*3];
Случайная генерация 300 дополнительных наблюдений немеченых данных с 100 наблюдениями на класс.
unlabeledX = [randn(100,2)*0.25 + ones(100,2);
randn(100,2)*0.25 - ones(100,2);
randn(100,2)*0.5];Подгонка меток к немеченым данным с помощью метода, основанного на полуконтролированном графике. Укажите расширение метки в качестве алгоритма маркировки и используйте автоматически выбранный масштабный коэффициент ядра. Функция fitsemigraph возвращает SemiSupervisedGraphModel объект, чей FittedLabels содержит соответствующие метки для немаркированных данных и LabelScores содержит связанные оценки меток.
Mdl = fitsemigraph(labeledX,Y,unlabeledX,'Method','labelspreading', ... 'KernelScale','auto')
Mdl =
SemiSupervisedGraphModel with properties:
FittedLabels: [300x1 double]
LabelScores: [300x3 double]
ClassNames: [1 2 3]
ResponseName: 'Y'
CategoricalPredictors: []
Method: 'labelspreading'
Properties, Methods
Случайная генерация 150 наблюдений новых данных с 50 наблюдениями на класс. В целях проверки следует отслеживать истинные метки для новых данных.
newX = [randn(50,2)*0.25 + ones(50,2);
randn(50,2)*0.25 - ones(50,2);
randn(50,2)*0.5];
trueLabels = [ones(50,1); ones(50,1)*2; ones(50,1)*3];Спрогнозировать метки для новых данных с помощью predict функции SemiSupervisedGraphModel объект. Сравните истинные метки с прогнозируемыми метками с помощью матрицы путаницы.
predictedLabels = predict(Mdl,newX); confusionchart(trueLabels,predictedLabels)

Только 3 из 150 наблюдений в newX имеют неправильную маркировку.
fitsemigraph | fitsemiself | predict | SemiSupervisedSelfTrainingModel
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.