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'Поддерживайте векторную машину<reservedrangesplaceholder0>  {-1,1}; 1 для положительного класса и -1 в противном случаеШарнир: [y,f(x)]=max[0,1yf(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' поскольку прямоугольное ограничение (C) и коэффициент регуляризации (λ) связаны между собой C = 1/( λ n).

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

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

Управление сходимостью

свернуть все

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

Давайте Bt=[βtbt], то есть вектор коэффициентов и член смещения при t итерации оптимизации. Если BtBt1Bt2<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 использует, чтобы преобразовать данные предиктора в высокомерное пространство. Для получения дополнительной информации смотрите Управление Global Stream с использованием RandStream и Создание и Управление потоком случайных чисел.

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

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

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

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

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

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

T(x)=m1/2exp(iZx')',

где Zm×p является выборкой, нарисованной из N(0,σ2) и σ2 является шкалой ядра. Эта схема требует O (m p) расчета и хранения. Схема Фастфуда вводит другой случайный базис V вместо того, чтобы Z использовать матрицы Адамара, объединенные с матрицами Гауссова масштабирования. Этот случайный базис снижает стоимость расчета до O (m logp) и сокращает объем памяти до O (m ).

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

Прямоугольное ограничение

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

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

Алгоритмы

templateKernel минимизирует регуляризованную целевую функцию с помощью решателя с ограниченной памятью Broyden-Fletcher-Goldfarb-Shanno (LBFGS) с регуляризацией гребня (L 2). Чтобы найти тип решателя 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] Le, Q., T. Sarlós, and A. Smola. Fastfood - аппроксимация расширений ядра в логинейном времени. Материалы 30-й Международной конференции по машинному обучению. Том 28, № 3, 2013, с. 244-252.

[3] Хуан, П. С., Х. Аврон, Т. Н. Сайнатх, В. Синдхвани и Б. Рамабхадран. «Методы ядра соответствуют глубоким нейронным сетям на TIMIT». 2014 IEEE International Conference on Acoustics, Speech and Signal Processing. 2014, стр 205–209.

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

См. также

|

Введенный в R2018b