exponenta event banner

ClassificationPartitionedLinear

Пакет: classreg.learning.partition
Суперклассы: ClassificationPartitionedModel

Перекрестно проверенная линейная модель для двоичной классификации высокомерных данных

Описание

ClassificationPartitionedLinear представляет собой набор моделей линейной классификации, обученных перекрестно проверенным складкам. Для получения модели с перекрестной проверкой линейной классификации используйте fitclinear и укажите одну из опций перекрестной проверки. Оценить качество классификации или то, насколько хорошо обобщается модель линейной классификации, можно с помощью одного или нескольких методов «kfold»: kfoldPredict, kfoldLoss, kfoldMargin, и kfoldEdge.

Каждый метод «kfold» использует модели, обученные на кратных наблюдениях, чтобы предсказать ответ для внеплановых наблюдений. Например, предположим, что выполняется перекрестная проверка с использованием пяти сгибов. В этом случае программное обеспечение случайным образом распределяет каждое наблюдение на пять групп примерно одинакового размера. Тренировочная складка содержит четыре группы (то есть примерно 4/5 данных), а тестовая складка содержит другую группу (то есть примерно 1/5 данных). В этом случае перекрестная проверка выполняется следующим образом:

  1. Программное обеспечение обучает первую модель (хранится в CVMdl.Trained{1}) с использованием наблюдений в последних четырех группах и резервирует наблюдения в первой группе для проверки.

  2. Программное обеспечение обучает вторую модель, которая хранится в CVMdl.Trained{2}, используя наблюдения в первой и последних трех группах. Программа резервирует наблюдения во второй группе для проверки.

  3. Аналогичным образом программное обеспечение работает для третьей-пятой моделей.

При проверке по вызову kfoldPredict, он вычисляет прогнозы для наблюдений в группе 1, используя первую модель, группу 2 для второй модели и так далее. Короче говоря, программное обеспечение оценивает отклик для каждого наблюдения, используя модель, обученную без этого наблюдения.

Примечание

ClassificationPartitionedLinear объекты модели не хранят набор данных предиктора.

Строительство

CVMdl = fitclinear(X,Y,Name,Value) создает перекрестно проверенную линейную классификационную модель, когда Name является либо 'CrossVal', 'CVPartition', 'Holdout', или 'KFold'. Дополнительные сведения см. в разделе fitclinear.

Свойства

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

Свойства перекрестной проверки

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

Например, 'Linear' задает линейную модель с перекрестной проверкой для двоичной классификации или регрессии.

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

Число перекрестно проверенных складок, указанное как положительное целое число.

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

Значения параметров перекрестной проверки, например, значения аргументов пары имя-значение, используемые для перекрестной проверки линейной модели, заданные как объект. ModelParameters не содержит оценочных параметров.

Свойства доступа ModelParameters с использованием точечной нотации.

Количество наблюдений в обучающих данных, указанных как положительный числовой скаляр.

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

Раздел данных, указывающий, как программное обеспечение разбивает данные на складки перекрестной проверки, указанные как cvpartition модель.

Модели линейной классификации, обученные на складках перекрестной проверки, указанные как массив ячеек ClassificationLinear модели. Trained имеет k ячеек, где k - количество складок.

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

Веса наблюдений, используемые для перекрестной проверки модели, заданные как числовой вектор. W имеет NumObservations элементы.

Программное обеспечение нормализуется W так что веса для наблюдений в пределах конкретного класса суммируются с предыдущей вероятностью этого класса.

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

Наблюдаемые метки классов, используемые для перекрестной проверки модели, указанные как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. Y имеет NumObservations элементы и является тем же типом данных, что и входной аргумент Y которое вы передали fitclinear для перекрестной проверки модели. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

Каждая строка Y представляет наблюдаемую классификацию соответствующего наблюдения в данных предиктора.

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

Другие свойства классификации

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

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

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

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

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

Затраты на неправильную классификацию, указанные как квадратная числовая матрица. Cost имеет K строк и столбцов, где K - количество классов.

Cost(i,j) - стоимость классификации точки по классу j если его истинный класс i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.

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

Имена предикторов в порядке их появления в данных предиктора, заданных как клеточный массив векторов символов. Длина PredictorNames равно количеству переменных в данных обучения X или Tbl используется в качестве переменных предиктора.

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

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

Вероятности предшествующего класса, определенные как числовой вектор. Prior имеет столько элементов, сколько классов в ClassNames, и порядок элементов соответствует элементам ClassNames.

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

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

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

Функция преобразования баллов для применения к прогнозируемым баллам, заданная как имя функции или дескриптор функции.

Для моделей линейной классификации и перед преобразованием прогнозируемый показатель классификации для наблюдения x (вектор строки) равен f (x) = + b, где β и b соответствуют Mdl.Beta и Mdl.Biasсоответственно.

Чтобы изменить функцию преобразования баллов, например, function, используйте точечную нотацию.

  • Для встроенной функции введите этот код и замените function со значением в таблице.

    Mdl.ScoreTransform = 'function';

    СтоимостьОписание
    'doublelogit'1/( 1 + e-2x)
    'invlogit'log (x/( 1 - x))
    'ismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0
    'logit'1/( 1 + e-x)
    'none' или 'identity'x (без преобразования)
    'sign'-1 для x < 0
    0 для x = 0
    1 для x > 0
    'symmetric'2x – 1
    'symmetricismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1
    'symmetriclogit'2/( 1 + e-x) - 1

  • Для функции MATLAB ® или определяемой функции введите дескриптор ее функции.

    Mdl.ScoreTransform = @function;

    function должен принять матрицу исходных баллов для каждого класса, а затем вернуть матрицу того же размера, представляющую преобразованные баллы для каждого класса.

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

Методы

kfoldEdgeКрай классификации для наблюдений, не используемых для обучения
kfoldLossКлассификационные потери для наблюдений, не используемых в обучении
kfoldMarginПоля классификации для наблюдений, не используемых при обучении
kfoldPredictПрогнозирование меток для наблюдений, не используемых для обучения

Копирование семантики

Значение. Сведения о том, как классы значений влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

Загрузите набор данных NLP.

load nlpdata

X является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса. В данных имеется более двух классов.

Определите метки, соответствующие страницам документации Toolbox™ статистики и машинного обучения.

Ystats = Y == 'stats';

Перекрестная проверка бинарной модели линейной классификации, которая может определить, находится ли подсчет слов на веб-странице документации из документации Toolbox™ статистики и машинного обучения.

rng(1); % For reproducibility 
CVMdl = fitclinear(X,Ystats,'CrossVal','on')
CVMdl = 
  ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является ClassificationPartitionedLinear модель с перекрестной проверкой. Поскольку fitclinear реализует 10-кратную перекрестную проверку по умолчанию, CVMdl.Trained содержит десять ClassificationLinear модели, содержащие результаты обучения модели линейной классификации для каждой из складок.

Оценка меток для внеплановых наблюдений и оценка ошибки обобщения путем передачи CVMdl кому kfoldPredict и kfoldLossсоответственно.

oofLabels = kfoldPredict(CVMdl);
ge = kfoldLoss(CVMdl)
ge = 7.6017e-04

Оценочная ошибка обобщения составляет менее 0,1% неправильно классифицированных наблюдений.

Чтобы определить хорошую силу лассо-штрафа для модели линейной классификации, которая использует учащегося логистической регрессии, реализуйте пятикратную перекрестную проверку.

Загрузите набор данных NLP.

load nlpdata

X является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса. В данных имеется более двух классов.

Модели должны определять, содержится ли подсчет слов на веб-странице в документации Toolbox™ статистики и машинного обучения. Таким образом, определите метки, соответствующие страницам документации Toolbox™ статистики и машинного обучения.

Ystats = Y == 'stats';

Создайте набор из 11 логарифмически разнесенных уровней регуляризации от 10-6 до 10-0,5.

Lambda = logspace(-6,-0.5,11);

Выполните перекрестную проверку моделей. Чтобы увеличить скорость выполнения, транспонируйте данные предиктора и укажите, что наблюдения находятся в столбцах. Оцените коэффициенты с помощью SpaRSA. Понизить допуск на градиенте целевой функции до 1e-8.

X = X'; 
rng(10); % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5,...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = 
  ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1x1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

numCLModels = numel(CVMdl.Trained)
numCLModels = 5

CVMdl является ClassificationPartitionedLinear модель. Поскольку fitclinear реализует пятикратную перекрестную проверку, CVMdl содержит 5 ClassificationLinear модели, которые программное обеспечение обучает на каждой складке.

Отображение первой обученной модели линейной классификации.

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023x11 double]
              Bias: [1x11 double]
            Lambda: [1x11 double]
           Learner: 'logistic'


  Properties, Methods

Mdl1 является ClassificationLinear объект модели. fitclinear построенный Mdl1 путем обучения на первых четырех складках. Поскольку Lambda - это последовательность сильных сторон регуляризации, вы можете думать о Mdl1 как 11 моделей, по одной для каждой силы регуляризации в Lambda.

Оценка кросс-проверенной ошибки классификации.

ce = kfoldLoss(CVMdl);

Потому что есть 11 сильных сторон регуляризации, ce является вектором 1 на 11 коэффициентов ошибок классификации.

Более высокие значения Lambda привести к предикторной переменной разреженности, которая является хорошим качеством классификатора. Для каждой силы регуляризации выполните обучение модели линейной классификации, используя весь набор данных и те же опции, что и при перекрестной проверке моделей. Определите количество ненулевых коэффициентов на модель.

Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',Lambda,'GradientTolerance',1e-8);
numNZCoeff = sum(Mdl.Beta~=0);

На том же рисунке постройте график перекрестно подтвержденных коэффициентов ошибок классификации и частоты ненулевых коэффициентов для каждой силы регуляризации. Постройте график всех переменных на шкале журнала.

figure;
[h,hL1,hL2] = plotyy(log10(Lambda),log10(ce),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} classification error')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
title('Test-Sample Statistics')
hold off

Figure contains 2 axes. Axes 1 with title Test-Sample Statistics contains an object of type line. Axes 2 contains an object of type line.

Выберите индекс силы регуляризации, который уравновешивает предикторную переменную разреженность и низкую ошибку классификации. В этом случае должно быть достаточно значения от 10-4 до 10-1.

idxFinal = 7;

Выберите модель из Mdl с выбранной силой регуляризации.

MdlFinal = selectModels(Mdl,idxFinal);

MdlFinal является ClassificationLinear модель, содержащая одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.

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