ClassificationPartitionedLinear

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

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

Описание

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

Каждый метод «kfold» использует модели, обученные внутрикратным наблюдениям, чтобы предсказать ответ для несовпадающих наблюдений. Например, предположим, что вы перекрестно проверяете с помощью пяти складок. В этом случае программное обеспечение случайным образом присваивает каждое наблюдение пяти группам примерно одинакового размера. training fold содержит четыре группы (то есть примерно 4/5 данных), а test fold - другую группу (то есть примерно 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 количество классов.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Mdl.ScoreTransform = 'function';

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

  • Для MATLAB® function, или функция, которую вы задаете, вводите указатель на функцию.

    Mdl.ScoreTransform = @function;

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

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

Методы

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

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

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

Примеры

свернуть все

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

load nlpdata

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

Идентифицируйте метки, которые соответствуют веб-страницам Statistics and Machine Learning Toolbox™ документации.

Ystats = Y == 'stats';

Перекрестная проверка двоичной, линейной модели классификации, которая может идентифицировать, являются ли подсчеты слов на веб-странице документации из документации Statistics and Machine Learning 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% неправильно классифицированных наблюдений.

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

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

load nlpdata

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

Модели должны определять, получено ли количество слов на веб-странице из документации Statistics and Machine Learning Toolbox™. Итак, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning 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 реализует 5-кратную перекрестную валидацию, 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