exponenta event banner

SemiSupervisedGraphModel

Полууправляемая графическая модель для классификации

    Описание

    Для маркировки немаркированных данных можно использовать метод на основе полуднадзорных графиков с помощью fitsemigraph функция. Получающееся SemiSupervisedGraphModel объект содержит соответствующие метки для немеченых наблюдений (FittedLabels) и их оценки (LabelScores). Вы также можете использовать SemiSupervisedGraphModel объект в качестве классификатора, обученного как маркированным, так и немаркированным данным, для классификации новых данных с помощью predict функция.

    Создание

    Создать SemiSupervisedGraphModel объект с помощью fitsemigraph.

    Свойства

    развернуть все

    Это свойство доступно только для чтения.

    Метки, соответствующие немаркированным данным, указанным как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. FittedLabels имеет тот же тип данных, что и метки класса в переменной ответа в вызове fitsemigraph. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

    Каждая строка FittedLabels представляет аппроксимированную метку соответствующей строки UnlabeledX или UnlabeledTbl.

    Для получения дополнительной информации о том, как fitsemigraph подходит для меток, см. раздел Алгоритмы.

    Типы данных: single | double | logical | char | cell | categorical

    Это свойство доступно только для чтения.

    Оценки для соответствующих меток, указанных как числовая матрица. LabelScores имеет размер u-by-K, где u - количество наблюдений (или строк) в немеченых данных, а K - число классов в ClassNames.

    score(u,k) вероятность того, что наблюдение u принадлежит классу k, где более высокое значение оценки указывает на более высокую вероятность.

    Для получения дополнительной информации о том, как fitsemigraph вычисляет оценки меток, см. раздел Алгоритмы.

    Типы данных: double

    Это свойство доступно только для чтения.

    Метод маркировки, используемый для маркировки немаркированных данных, указанный как 'labelpropagation', 'labelpropagationexact', 'labelspreading', или 'labelspreadingexact'.

    Типы данных: char

    Это свойство доступно только для чтения.

    Индексы категориального предиктора, заданные как положительный целочисленный вектор. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).

    Типы данных: single | double

    Это свойство доступно только для чтения.

    Уникальные метки классов, используемые для маркировки немаркированных данных, указанных как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. Порядок элементов ClassNames определяет порядок классов.

    Типы данных: single | double | logical | char | cell | categorical

    Это свойство доступно только для чтения.

    Имена переменных предиктора, заданные как массив ячеек векторов символов. Порядок элементов PredictorNames соответствует порядку, в котором имена предикторов появляются в данных предиктора.

    Типы данных: cell

    Это свойство доступно только для чтения.

    Имя ответной переменной, указанное как символьный вектор.

    Типы данных: 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')

    Figure contains an axes. The axes with title Labeled Data contains an object of type scatter.

    Случайная генерация 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')

    Figure contains an axes. The axes with title Fitted Labels for Unlabeled Data contains an object of type scatter.

    Определите точность маркировки, используя истинные метки для немаркированных данных.

    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)

    Figure contains an object of type ConfusionMatrixChart.

    Только 3 из 150 наблюдений в newX имеют неправильную маркировку.

    Представлен в R2020b