ClassificationPartitionedLinearECOC

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

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

Описание

ClassificationPartitionedLinearECOC является набором моделей выходных кодов с исправлением ошибок (ECOC), состоящих из линейных классификационных моделей, обученных на перекрестных проверенных складках. Оцените качество классификации путем перекрестной валидации с помощью одной или нескольких функций «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 для второй модели и так далее. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения, используя модель, обученную без этого наблюдения.

Примечание

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

    ЗначениеПрисвоение дихотомических классов
    –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).

    ЗначениеПрисвоение дихотомических классов
    –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 если его класс true i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.

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

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

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

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

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

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

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

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

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

Загрузите набор данных 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 реализует 5-кратную перекрестную валидацию, CVMdl содержит массив ячеек 5 на 1 CompactClassificationECOC модели, которые программное обеспечение обучает на каждой складке. The BinaryLearners свойство каждого CompactClassificationECOC модель содержит ClassificationLinear модели. Количество ClassificationLinear модели в каждой компактной модели ECOC зависят от количества отдельных меток и проекта кодирования. Потому что Lambda последовательность регуляризационных сильных сторон, вы можете думать о CLMdl1 как 11 моделей, по одной на каждую силу регуляризации в Lambda.

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

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