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')

    Случайным образом сгенерируйте 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.

    Введенный в R2020b