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