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