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