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 mislabeled.

    Используйте и помеченные и непомеченные данные, чтобы обучить 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 mislabeled.

    Введенный в R2020b