SemiSupervisedSelfTrainingModel

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

    Описание

    Можно использовать полууправляемый самометод обучения для маркировки немаркированных данных при помощи fitsemiself функция. Результат SemiSupervisedSelfTrainingModel объект содержит установленные метки для немеченых наблюдений (FittedLabels) и их счета (LabelScores). Можно также использовать SemiSupervisedSelfTrainingModel объект как классификатор, обученный как на маркированных, так и немеченых данных, для классификации новых данных при помощи predict функция.

    Создание

    Создайте SemiSupervisedSelfTrainingModel объект при помощи fitsemiself.

    Свойства

    расширить все

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

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

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

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

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

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

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

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

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

    Базовый классификатор, заданный как объект классификационной модели. fitsemiself использует этот классификатор в цикле, чтобы пометить и оценить немаркированные данные. Можно использовать запись через точку для отображения значений параметров и гиперзначений параметров базового классификатора.

    Для примера, если вы задаете 'Learner','svm' в вызове на fitsemiself, затем можно ввести Mdl.Learner.KernelParameters отображение параметров ядра модели конечной машины опорных векторов (SVM), обученной как на маркированных, так и немаркированных данных.

    Примечание

    Потому что Mdl.Learner модель имеет некоторые ограничения (для примера, отсутствие поддержки табличных данных), избегайте использовать ее непосредственно с ее объектом функциями, такими как loss и predict. Чтобы предсказать новые данные, используйте predict функция объекта от SemiSupervisedSelfTrainingModel.

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

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

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

    Подгонка меток к немаркированным данным с помощью полууправляемого самометода обучения. Функция fitsemiself возвращает SemiSupervisedSelfTrainingModel объект, чей FittedLabels свойство содержит установленные метки для немаркированных данных и LabelScores свойство содержит связанные счета меток.

    Mdl = fitsemiself(labeledX,Y,unlabeledX)
    Mdl = 
      SemiSupervisedSelfTrainingModel with properties:
    
                 FittedLabels: [300x1 double]
                  LabelScores: [300x3 double]
                   ClassNames: [1 2 3]
                 ResponseName: 'Y'
        CategoricalPredictors: []
                      Learner: [1x1 classreg.learning.classif.CompactClassificationECOC]
    
    
      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 = 8
    

    Только 8 из 300 наблюдений в unlabeledX неправильно маркированы.

    Используйте маркированные и немаркированные данные для обучения SemiSupervisedSelfTrainingModel объект. Пометьте новые данные с помощью обученной модели.

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

    Подгонка меток к немаркированным данным с помощью полууправляемого самометода обучения. Функция fitsemiself возвращает SemiSupervisedSelfTrainingModel объект, чей FittedLabels свойство содержит установленные метки для немаркированных данных и LabelScores свойство содержит связанные счета меток.

    Mdl = fitsemiself(labeledX,Y,unlabeledX)
    Mdl = 
      SemiSupervisedSelfTrainingModel with properties:
    
                 FittedLabels: [300x1 double]
                  LabelScores: [300x3 double]
                   ClassNames: [1 2 3]
                 ResponseName: 'Y'
        CategoricalPredictors: []
                      Learner: [1x1 classreg.learning.classif.CompactClassificationECOC]
    
    
      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 функция SemiSupervisedSelfTrainingModel объект. Сравните истинные метки с предсказанными метками с помощью матрицы неточностей.

    predictedLabels = predict(Mdl,newX);
    confusionchart(trueLabels,predictedLabels)

    Figure contains an object of type ConfusionMatrixChart.

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

    Введенный в R2020b