exponenta event banner

ClassificationPartitionedLinearECOC

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

Модель выходных кодов с перекрестной проверкой линейных ошибок для многоклассовой классификации высокоразмерных данных

Описание

ClassificationPartitionedLinearECOC представляет собой набор моделей выходных кодов с исправлением ошибок (ECOC), состоящий из моделей линейной классификации, обученных перекрестно проверенным складкам. Оценка качества классификации путем перекрестной проверки с использованием одной или нескольких функций «kfold»: kfoldPredict, kfoldLoss, kfoldMargin, и kfoldEdge.

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

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

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

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

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

Примечание

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

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

CVMdl = fitcecoc(X,Y,'Learners',t,Name,Value) возвращает перекрестно проверенную линейную модель ECOC, когда:

  • t является 'Linear' или объект шаблона, возвращенный templateLinear.

  • Name является одним из 'CrossVal', 'CVPartition', 'Holdout', или 'KFold'.

Дополнительные сведения см. в разделе fitcecoc.

Свойства

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

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

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

Например, 'ECOC' задает модель ECOC с перекрестной проверкой.

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

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

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

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

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

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

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

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

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

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

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

Программное обеспечение нормализует веса, используемые для обучения, так, чтобы sum(W,'omitnan') является 1.

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

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

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

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

Свойства ECOC

Двоичная функция потери ученика, заданная как вектор символов, представляющий имя функции потери.

Если вы обучаетесь с использованием двоичных учеников, которые используют различные функции потери, то программное обеспечение BinaryLoss кому 'hamming'. Чтобы потенциально повысить точность, укажите бинарную функцию потерь, отличную от функции по умолчанию, во время прогнозирования или вычисления потерь с помощью 'BinaryLoss' аргумент пары имя-значение predict или loss.

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

Двоичные метки класса учащегося, указанные как числовая матрица или [].

  • Если матрица кодирования одинакова по складкам, то BinaryY является NumObservations-by-L матрица, где L - число двоичных учеников (size(CodingMatrix,2)).

    Элементы BinaryY являются -1, 0, или 1и значение соответствует дихотомическому присвоению класса. В этой таблице описывается процесс обучения j назначает наблюдение k к дихотомическому классу, соответствующему значению BinaryY(k,j).

    СтоимостьНазначение класса Dichotomous
    –1Ученик j назначает наблюдение k отрицательному классу.
    0Перед началом обучения учащийся j удаляет наблюдение k из набора данных.
    1Ученик j назначает наблюдение k к положительному классу.

  • Если матрица кодирования различается по складкам, то BinaryY пуст ([]).

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

Коды, определяющие назначения классов для двоичных учеников, указанные как числовая матрица или [].

  • Если матрица кодирования одинакова по складкам, то CodingMatrix является матрицей K-by-L. K - количество классов, а L - число двоичных учеников.

    Элементы CodingMatrix являются -1, 0, или 1и значение соответствует дихотомическому присвоению класса. В этой таблице описывается процесс обучения j назначает наблюдения в классе i к дихотомическому классу, соответствующему значению CodingMatrix(i,j).

    СтоимостьНазначение класса Dichotomous
    –1Ученик j назначает наблюдения в классе i отрицательному классу.
    0Перед началом обучения учащийся j удаляет наблюдения в классе i из набора данных.
    1Ученик j назначает наблюдения в классе i к положительному классу.

  • Если матрица кодирования различается по складкам, то CodingMatrix пуст ([]). Получение матрицы кодирования для каждого сворачивания с помощью Trained собственность. Например, CVMdl.Trained{1}.CodingMatrix - матрица кодирования в первой последовательности перекрестно проверенной модели ECOC CVMdl.

Типы данных: double | single | int8 | int16 | int32 | int64

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Типы данных: 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 является категориальным вектором меток класса.

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

rng(1); % For reproducibility 
CVMdl = fitcecoc(X,Y,'Learners','linear','CrossVal','on')
CVMdl = 
  ClassificationPartitionedLinearECOC
    CrossValidatedModel: 'LinearECOC'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: [1x13 categorical]
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является ClassificationPartitionedLinearECOC модель с перекрестной проверкой. Поскольку fitcecoc реализует 10-кратную перекрестную проверку по умолчанию, CVMdl.Trained содержит вектор ячейки 10 на 1 из десяти CompactClassificationECOC модели, содержащие результаты обучения моделей ECOC, состоящих из бинарных линейных классификационных моделей для каждой из складок.

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

oofLabels = kfoldPredict(CVMdl);
ge = kfoldLoss(CVMdl)
ge = 0.0958

Предполагаемая ошибка обобщения составляет около 10% неправильно классифицированных наблюдений.

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

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

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

load nlpdata

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

Для простоты используйте метку «others» для всех наблюдений в Y которые не являются 'simulink', 'dsp', или 'comm'.

Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';

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

Lambda = logspace(-7,-2,11);

Создайте шаблон модели линейной классификации, который определяет использование учащихся логистической регрессии, использование штрафов за лассо с сильными сторонами в Lambda, обучение с использованием SpaRSA и понижение допуска на градиенте целевой функции до 1e-8.

t = templateLinear('Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8);

Выполните перекрестную проверку моделей. Чтобы увеличить скорость выполнения, транспонируйте данные предиктора и укажите, что наблюдения находятся в столбцах.

X = X'; 
rng(10); % For reproducibility
CVMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','KFold',5);

CVMdl является ClassificationPartitionedLinearECOC модель.

Анализировать CVMdlи каждая модель внутри него.

numECOCModels = numel(CVMdl.Trained)
numECOCModels = 5
ECOCMdl1 = CVMdl.Trained{1}
ECOCMdl1 = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: [comm    dsp    simulink    others]
    ScoreTransform: 'none'
    BinaryLearners: {6×1 cell}
      CodingMatrix: [4×6 double]


  Properties, Methods

numCLModels = numel(ECOCMdl1.BinaryLearners)
numCLModels = 6
CLMdl1 = ECOCMdl1.BinaryLearners{1}
CLMdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [-1 1]
    ScoreTransform: 'logit'
              Beta: [34023×11 double]
              Bias: [-0.3169 -0.3169 -0.3168 -0.3168 -0.3168 -0.3167 -0.1725 -0.0805 -0.1762 -0.3450 -0.5174]
            Lambda: [1.0000e-07 3.1623e-07 1.0000e-06 3.1623e-06 1.0000e-05 3.1623e-05 1.0000e-04 3.1623e-04 1.0000e-03 0.0032 0.0100]
           Learner: 'logistic'


  Properties, Methods

Поскольку fitcecoc реализует пятикратную перекрестную проверку, CVMdl содержит массив ячеек 5 на 1 CompactClassificationECOC модели, которые программное обеспечение обучает на каждой складке. BinaryLearners свойство каждого CompactClassificationECOC модель содержит ClassificationLinear модели. Количество ClassificationLinear модели в каждой компактной модели ECOC зависят от количества отдельных меток и дизайна кодирования. Поскольку Lambda - это последовательность сильных сторон регуляризации, вы можете думать о CLMdl1 как 11 моделей, по одной для каждой силы регуляризации в Lambda.

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

ce = kfoldLoss(CVMdl);
figure;
plot(log10(Lambda),log10(ce))
[~,minCEIdx] = min(ce);
minLambda = Lambda(minCEIdx);
hold on
plot(log10(minLambda),log10(ce(minCEIdx)),'ro');
ylabel('log_{10} 5-fold classification error')
xlabel('log_{10} Lambda')
legend('MSE','Min classification error')
hold off

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

t = templateLinear('Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','Lambda',minLambda,'GradientTolerance',1e-8);
MdlFinal = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns');

Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.

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