exponenta event banner

templateKernel

Шаблон модели ядра

Описание

templateKernel создает шаблон, подходящий для подгонки модели классификации ядра Гаусса для нелинейной классификации.

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

пример

t = templateKernel() возвращает шаблон модели ядра.

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

пример

t = templateKernel(Name,Value) возвращает шаблон с дополнительными параметрами, заданными одним или несколькими аргументами пары имя-значение. Например, можно реализовать логистическую регрессию или указать количество размеров развернутого пространства.

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

Примеры

свернуть все

Создайте шаблон модели ядра по умолчанию и используйте его для обучения многоклассовой модели кодов вывода с исправлением ошибок (ECOC).

Загрузите набор данных радужки Фишера.

load fisheriris

Создайте шаблон модели ядра по умолчанию.

t = templateKernel()
t = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: []
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: []
                    Lambda: []
                   Learner: 'svm'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

Во время обучения программа заполняет пустые свойства соответствующими значениями по умолчанию.

Определить t как двоичный ученик для многоклассовой модели ECOC.

Mdl = fitcecoc(meas,species,'Learners',t)
Mdl = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3x1 cell}
      CodingMatrix: [3x3 double]


  Properties, Methods

Mdl является CompactClassificationECOC мультиклассовый классификатор.

Создайте шаблон модели ядра с дополнительными опциями для реализации логистической регрессии с параметром масштаба ядра, выбранным эвристической процедурой.

t = templateKernel('Learner','logistic','KernelScale','auto')
t = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: []
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: 'auto'
                    Lambda: []
                   Learner: 'logistic'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

Входные аргументы

свернуть все

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Learner','logistic','NumExpansionDimensions',2^15,'KernelScale','auto' определяет реализацию логистической регрессии после сопоставления данных предиктора с 2^15 размерное пространство с использованием расширения признаков с параметром масштаба ядра, выбранным эвристической процедурой.
Параметры классификации ядра

свернуть все

Тип модели линейной классификации, указанный как разделенная запятыми пара, состоящая из 'Learner' и 'svm' или 'logistic'.

В следующей таблице f (x) = T (x) β + b.

  • x - наблюдение (вектор строки) из p переменных предиктора.

  • T (·) - преобразование наблюдения (вектор строки) для расширения признаков. T (x) отображает x в ℝp в высокомерное пространство (ℝm).

  • β - вектор из m коэффициентов.

  • b - скалярное смещение.

СтоимостьАлгоритмДиапазон ответаФункция потерь
'svm'Опорная векторная машинаy ∊ {-1,1}; 1 для положительного класса и -1 в противном случаеШарнир: ℓ[y,f (x)] = max [0,1 yf (x)]
'logistic'Логистическая регрессияТо же, что и 'svm'Отклонение (логистическое): ℓ[y,f (x)] = log {1 + exp [yf (x)]}

Пример: 'Learner','logistic'

Количество размеров развернутого пространства, указанного как разделенная запятыми пара, состоящая из 'NumExpansionDimensions' и 'auto' или положительное целое число. Для 'auto', templateKernel функция выбирает количество размеров с помощью 2.^ceil(min(log2(p)+5,15)), где p - количество предикторов.

Дополнительные сведения см. в разделе Случайное расширение элементов.

Пример: 'NumExpansionDimensions',2^15

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

Параметр масштаба ядра, заданный как разделенная запятыми пара, состоящая из 'KernelScale' и 'auto' или положительный скаляр. Программное обеспечение получает случайный базис для случайного расширения признаков с использованием параметра масштаба ядра. Дополнительные сведения см. в разделе Случайное расширение элементов.

При указании 'auto'затем программное обеспечение выбирает соответствующий параметр масштаба ядра с использованием эвристической процедуры. Эта эвристическая процедура использует субдискретизацию, поэтому оценки могут варьироваться от одного вызова к другому. Поэтому для воспроизведения результатов установите начальное число случайного числа с помощью rng перед тренировкой.

Пример: 'KernelScale','auto'

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

Ограничение поля, указанное как пара, разделенная запятыми, состоящая из 'BoxConstraint' и положительный скаляр.

Этот аргумент допустим только в том случае, если 'Learner' является 'svm'(по умолчанию) и вы не указываете значение для силы термина регуляризации 'Lambda'. Можно указать либо 'BoxConstraint' или 'Lambda' поскольку ограничение поля (C) и сила члена регуляризации (λ) связаны C = 1/( λ n), где n - число наблюдений.

Пример: 'BoxConstraint',100

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

Сила термина регуляризации, определяемая как разделенная запятыми пара, состоящая из 'Lambda' и 'auto' или неотрицательный скаляр.

Для 'auto', значение 'Lambda' равно 1/n, где n - число наблюдений.

Можно указать либо 'BoxConstraint' или 'Lambda' поскольку ограничение (С) и сила члена регуляризации (λ) связаны С = 1/( λ n).

Пример: 'Lambda',0.01

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

Элементы управления сходимостью

свернуть все

Относительный допуск на линейные коэффициенты и член смещения (пересечение), указанный как разделенная запятыми пара, состоящая из 'BetaTolerance' и неотрицательный скаляр.

Пусть Bt = [βt bt], то есть вектор коэффициентов и член смещения при итерации оптимизации т. Если Bt−Bt−1Bt‖2<BetaTolerance, то оптимизация заканчивается.

Если также указать GradientTolerance, то оптимизация завершается, когда программное обеспечение удовлетворяет любому критерию остановки.

Пример: 'BetaTolerance',1e–6

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

Абсолютный градиентный допуск, заданный как разделенная запятыми пара, состоящая из 'GradientTolerance' и неотрицательный скаляр.

Пусть ∇ℒt является градиентным вектором целевой функции относительно коэффициентов и члена смещения при итерации оптимизации T. Если ∇ℒt‖∞=max|∇ℒt|<GradientTolerance, то оптимизация заканчивается.

Если также указать BetaTolerance, то оптимизация завершается, когда программное обеспечение удовлетворяет любому критерию остановки.

Пример: 'GradientTolerance',1e–5

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

Максимальное число итераций оптимизации, указанное как пара, разделенная запятыми, состоящая из 'IterationLimit' и положительное целое число.

Значение по умолчанию - 1000, если преобразованные данные помещаются в память, как указано в BlockSize аргумент пары имя-значение. В противном случае значение по умолчанию равно 100.

Пример: 'IterationLimit',500

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

Другие параметры классификации ядра

свернуть все

Максимальный объем выделенной памяти (в мегабайтах), указанный как разделенная запятыми пара, состоящая из 'BlockSize' и положительный скаляр.

Если templateKernel требует больше памяти, чем значение 'BlockSize' для хранения преобразованных данных предиктора программное обеспечение использует блочную стратегию. Дополнительные сведения о блочной стратегии см. в разделе Алгоритмы.

Пример: 'BlockSize',1e4

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

Поток случайных чисел для воспроизводимости преобразования данных, определяемый как разделенная запятыми пара, состоящая из 'RandomStream' и объект случайного потока. Дополнительные сведения см. в разделе Случайное расширение элементов.

Использовать 'RandomStream' для воспроизведения случайных базисных функций, которые templateKernel используется для преобразования данных предиктора в многомерное пространство. Дополнительные сведения см. в разделах Управление глобальным потоком с помощью RandStream и Создание и управление потоком случайных чисел.

Пример: 'RandomStream',RandStream('mlfg6331_64')

Размер буфера истории для гессенского приближения, определяемый как разделенная запятыми пара, состоящая из 'HessianHistorySize' и положительное целое число. При каждой итерации templateKernel составляет гессенское приближение, используя статистику из последних HessianHistorySize итерации.

Пример: 'HessianHistorySize',10

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

Уровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и либо 0 или 1. Verbose управляет отображением диагностической информации в командной строке.

СтоимостьОписание
0templateKernel не отображает диагностическую информацию.
1templateKernel отображает значение целевой функции, величину градиента и другую диагностическую информацию.

Пример: 'Verbose',1

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

Выходные аргументы

свернуть все

Шаблон модели ядра, возвращенный как объект шаблона. Чтобы обучить модель классификации ядра мультиклассовым проблемам, передайте t кому fitcecoc.

При отображении t в окне команд некоторые свойства отображаются пустыми ([]). Во время обучения программа заменяет пустые свойства соответствующими значениями по умолчанию.

Подробнее

свернуть все

Случайное расширение функций

Расширение случайных характеристик, таких как Random Kitchen Sinks [1] и Fastfood [2], - это схема аппроксимации гауссовых ядер алгоритма классификации ядер для использования в больших данных вычислительно эффективным способом. Случайное расширение функций является более практичным для приложений больших данных, которые имеют большие обучающие наборы, но также может быть применено к меньшим наборам данных, которые подходят в памяти.

Алгоритм классификации ядра ищет оптимальную гиперплоскость, разделяющую данные на два класса после отображения признаков в высокомерное пространство. Нелинейные элементы, которые не являются линейно разделяемыми в низкоразмерном пространстве, могут быть разделяемыми в расширенном высокомерном пространстве. Во всех расчетах для классификации гиперплоскостей используются только точечные произведения. Получить нелинейную классификационную модель можно, заменив скалярное произведение x1x2 'на нелинейную функцию ядра G (x1, x2) =〈φ (x1), start( x2) 〉, где xi - i-е наблюдение (вектор строки) и (xi) - преобразование, отображающее xi в высокомерное пространство (называемое «хитростью ядра»). Однако оценка G (x1, x2) (Gram-матрица) для каждой пары наблюдений является вычислительной дорогой для большого набора данных (большое n).

Схема случайного расширения признаков находит случайное преобразование так, что её скалярное произведение аппроксимирует гауссово ядро. То есть

G (x1, x2) =〈φ (x1), (x2) ≈T (x1) T (x2) ',

где T (x) отображает x в ℝp в высокомерное пространство (ℝm). Схема Random Kitchen Sink использует случайное преобразование

T (x) = m 1/2exp (iZx ')',

где Z∈ℝm×p - выборка, взятая из N (0, λ − 2), а start2 - шкала ядра. Эта схема требует O (mp) вычислений и хранения. Схема Фастфуда вводит другой случайный базис V вместо Z с использованием матриц Адамара, объединенных с гауссовыми матрицами масштабирования. Этот случайный базис уменьшает вычислительные затраты до O (mlogр) и уменьшает объем хранения до O (м ).

templateKernel функция использует схему Fastfood для случайного расширения признаков и использует линейную классификацию для обучения модели классификации ядра Гаусса. В отличие от решателей в templateSVM функция, которая требует вычисления матрицы n-на-n Gram, решателя в templateKernel требуется только сформировать матрицу размера n-by-m, где m обычно намного меньше, чем n для больших данных.

Ограничение рамки

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

Ограничение бокса (C) и сила члена регуляризации (λ) связаны C = 1/( λ n), где n - количество наблюдений.

Алгоритмы

templateKernel минимизирует регуляризованную целевую функцию, используя решатель с ограниченной памятью Бройдена-Флетчера-Гольдфарба-Шанно (LBFGS) с регуляризацией гребня (L2). Чтобы найти тип решателя LBFGS, используемого для обучения, введите FitInfo.Solver в окне команд.

  • 'LBFGS-fast' - решатель LBFGS.

  • 'LBFGS-blockwise' - решатель LBFGS с блочной стратегией. Если templateKernel требует больше памяти, чем значение BlockSize чтобы сохранить преобразованные данные предиктора, он использует блочную стратегию.

  • 'LBFGS-tall' - решатель LBFGS с блочной стратегией для больших массивов.

Когда templateKernel использует поэтапную стратегию, templateKernel реализует LBFGS, распределяя вычисление потерь и градиента между различными частями данных на каждой итерации. Также, templateKernel уточняет начальные оценки линейных коэффициентов и члена смещения, подгоняя модель локально к частям данных и комбинируя коэффициенты путем усреднения. При указании 'Verbose',1, то templateKernel отображает диагностическую информацию для каждого прохода данных и сохраняет информацию в History поле FitInfo.

Когда templateKernel не использует блочную стратегию, начальные оценки равны нулю. При указании 'Verbose',1, то templateKernel отображает диагностическую информацию для каждой итерации и сохраняет информацию в History поле FitInfo.

Ссылки

[1] Рахими, А. и Б. Рехт. «Случайные возможности для крупногабаритных машин ядра». Достижения в системах обработки нейронной информации. т. 20, 2008, стр. 1177-1184.

[2] Ле, К., Т. Сарлос и А. Смола. «Fastfood - аппроксимация расширений ядра в логлинеарное время». Материалы 30-й Международной конференции по машинному обучению. т. 28, № 3, 2013, стр. 244-252.

[3] Хуан, П. С., Х. Аврон, Т. Н. Сайнатх, В. Синдхвани и Б. Рамабхадран. «Kernel methods match Deep Neural Networks on TIMIT». Международная конференция IEEE 2014 по акустике, речи и обработке сигналов. 2014, стр 205–209.

Расширенные возможности

См. также

|

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