fsrnca

Выбор признаков с помощью анализа компонента окрестности для регрессии

Описание

пример

mdl = fsrnca(X,Y) выполняет выбор признаков для регрессии, используя предикторы в X и ответы в Y.

fsrnca изучает веса функции путем диагональной адаптации анализа соседних компонентов (NCA) с регуляризацией.

пример

mdl = fsrnca(X,Y,Name,Value) выполняет выбор признаков для регрессии с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

Примеры

свернуть все

Сгенерируйте данные игрушки, где переменная отклика зависит от 3-го, 9-го и 15-го предикторов.

rng(0,'twister'); % For reproducibility
N = 100;
X = rand(N,20);
y = 1 + X(:,3)*5 + sin(X(:,9)./X(:,15) + 0.25*randn(N,1));

Подбор модели анализа компонентов окрестностей для регрессии.

mdl = fsrnca(X,y,'Verbose',1,'Lambda',0.5/N);
 o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|        0 |  1.636932e+00 |   3.688e-01 |   0.000e+00 |        |   1.627e+00 |   0.000e+00 |   YES  |
|        1 |  8.304833e-01 |   1.083e-01 |   2.449e+00 |    OK  |   9.194e+00 |   4.000e+00 |   YES  |
|        2 |  7.548105e-01 |   1.341e-02 |   1.164e+00 |    OK  |   1.095e+01 |   1.000e+00 |   YES  |
|        3 |  7.346997e-01 |   9.752e-03 |   6.383e-01 |    OK  |   2.979e+01 |   1.000e+00 |   YES  |
|        4 |  7.053407e-01 |   1.605e-02 |   1.712e+00 |    OK  |   5.809e+01 |   1.000e+00 |   YES  |
|        5 |  6.970502e-01 |   9.106e-03 |   8.818e-01 |    OK  |   6.223e+01 |   1.000e+00 |   YES  |
|        6 |  6.952347e-01 |   5.522e-03 |   6.382e-01 |    OK  |   3.280e+01 |   1.000e+00 |   YES  |
|        7 |  6.946302e-01 |   9.102e-04 |   1.952e-01 |    OK  |   3.380e+01 |   1.000e+00 |   YES  |
|        8 |  6.945037e-01 |   6.557e-04 |   9.942e-02 |    OK  |   8.490e+01 |   1.000e+00 |   YES  |
|        9 |  6.943908e-01 |   1.997e-04 |   1.756e-01 |    OK  |   1.124e+02 |   1.000e+00 |   YES  |
|       10 |  6.943785e-01 |   3.478e-04 |   7.755e-02 |    OK  |   7.621e+01 |   1.000e+00 |   YES  |
|       11 |  6.943728e-01 |   1.428e-04 |   3.416e-02 |    OK  |   3.649e+01 |   1.000e+00 |   YES  |
|       12 |  6.943711e-01 |   1.128e-04 |   1.231e-02 |    OK  |   6.092e+01 |   1.000e+00 |   YES  |
|       13 |  6.943688e-01 |   1.066e-04 |   2.326e-02 |    OK  |   9.319e+01 |   1.000e+00 |   YES  |
|       14 |  6.943655e-01 |   9.324e-05 |   4.399e-02 |    OK  |   1.810e+02 |   1.000e+00 |   YES  |
|       15 |  6.943603e-01 |   1.206e-04 |   8.823e-02 |    OK  |   4.609e+02 |   1.000e+00 |   YES  |
|       16 |  6.943582e-01 |   1.701e-04 |   6.669e-02 |    OK  |   8.425e+01 |   5.000e-01 |   YES  |
|       17 |  6.943552e-01 |   5.160e-05 |   6.473e-02 |    OK  |   8.832e+01 |   1.000e+00 |   YES  |
|       18 |  6.943546e-01 |   2.477e-05 |   1.215e-02 |    OK  |   7.925e+01 |   1.000e+00 |   YES  |
|       19 |  6.943546e-01 |   1.077e-05 |   6.086e-03 |    OK  |   1.378e+02 |   1.000e+00 |   YES  |

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|       20 |  6.943545e-01 |   2.260e-05 |   4.071e-03 |    OK  |   5.856e+01 |   1.000e+00 |   YES  |
|       21 |  6.943545e-01 |   4.250e-06 |   1.109e-03 |    OK  |   2.964e+01 |   1.000e+00 |   YES  |
|       22 |  6.943545e-01 |   1.916e-06 |   8.356e-04 |    OK  |   8.649e+01 |   1.000e+00 |   YES  |
|       23 |  6.943545e-01 |   1.083e-06 |   5.270e-04 |    OK  |   1.168e+02 |   1.000e+00 |   YES  |
|       24 |  6.943545e-01 |   1.791e-06 |   2.673e-04 |    OK  |   4.016e+01 |   1.000e+00 |   YES  |
|       25 |  6.943545e-01 |   2.596e-07 |   1.111e-04 |    OK  |   3.154e+01 |   1.000e+00 |   YES  |

         Infinity norm of the final gradient = 2.596e-07
              Two norm of the final step     = 1.111e-04, TolX   = 1.000e-06
Relative infinity norm of the final gradient = 2.596e-07, TolFun = 1.000e-06
EXIT: Local minimum found.

Постройте график выбранных функций. Веса нерелевантных функций должны быть близки к нулю.

figure()
plot(mdl.FeatureWeights,'ro')
grid on
xlabel('Feature index')
ylabel('Feature weight')

Figure contains an axes. The axes contains an object of type line.

fsrnca правильно обнаруживает соответствующие предикторы для этого отклика.

Загрузите выборочные данные.

load robotarm.mat

The robotarm (pumadyn32nm) создается с помощью симулятора руки робота с 7168 обучающими наблюдениями и 1024 тестовыми наблюдениями с 32 признаками [1] [2]. Это предварительно обработанная версия исходного набора данных. Данные предварительно обрабатываются путем вычитания линейной регрессионной подгонки с последующей нормализацией всех функций к единичному отклонению.

Выполните выбор признаков анализа соседских компонентов (NCA) для регрессии с параметром по умолчанию λ (параметр регуляризации) значение.

nca = fsrnca(Xtrain,ytrain,'FitMethod','exact', ...
    'Solver','lbfgs');

Постройте график выбранных значений.

figure
plot(nca.FeatureWeights,'ro')
xlabel('Feature index')
ylabel('Feature weight')
grid on

Figure contains an axes. The axes contains an object of type line.

Больше половины весов функций ненулевые. Вычислите потери, используя тестовый набор как меру эффективности при помощи выбранных функций.

L = loss(nca,Xtest,ytest)
L = 0.0837

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

1. Разделите данные на пять складок. Для каждой складки cvpartition Присвоения 4/5-ю часть данных как набор обучающих данных и 1/5-ю часть данных как тестовый набор.

rng(1) % For reproducibility 
n = length(ytrain);
cvp = cvpartition(length(ytrain),'kfold',5);
numvalidsets = cvp.NumTestSets;

Назначьте λ значения для поиска. Умножение значений отклика на константу увеличивает срок функции потерь на множитель константы. Поэтому, включая std(ytrain) коэффициент в λ значения балансируют функцию потерь по умолчанию ('mad', среднее абсолютное отклонение) термин и термин регуляризации в целевой функции. В этом примере std(ytrain) коэффициент равен единице, поскольку загруженные выборочные данные являются предварительно обработанной версией исходного набора данных.

lambdavals = linspace(0,50,20)*std(ytrain)/n;

Создайте массив для хранения значений потерь.

lossvals = zeros(length(lambdavals),numvalidsets);

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

3. Вычислите регрессионные потери для соответствующего тестового набора в складке с помощью модели NCA. Запишите значение потерь.

4. Повторите это для каждого λ значение и каждый сгиб.

for i = 1:length(lambdavals)
    for k = 1:numvalidsets
        X = Xtrain(cvp.training(k),:);
        y = ytrain(cvp.training(k),:);
        Xvalid = Xtrain(cvp.test(k),:);
        yvalid = ytrain(cvp.test(k),:);

        nca = fsrnca(X,y,'FitMethod','exact', ...
             'Solver','minibatch-lbfgs','Lambda',lambdavals(i), ...
             'GradientTolerance',1e-4,'IterationLimit',30);
        
        lossvals(i,k) = loss(nca,Xvalid,yvalid,'LossFunction','mse');
    end
end

Вычислите средние потери, полученные из складок для каждого λ значение.

meanloss = mean(lossvals,2);

Постройте график средних потерь по сравнению с λ значения.

figure
plot(lambdavals,meanloss,'ro-')
xlabel('Lambda')
ylabel('Loss (MSE)')
grid on

Figure contains an axes. The axes contains an object of type line.

Найти λ значение, которое задает минимальное значение потерь.

[~,idx] = min(meanloss)
idx = 17
bestlambda = lambdavals(idx)
bestlambda = 0.0059
bestloss = meanloss(idx)
bestloss = 0.0590

Подгонка модели выбора признаков NCA для регрессии с использованием лучшей λ значение.

nca = fsrnca(Xtrain,ytrain,'FitMethod','exact', ...
    'Solver','lbfgs','Lambda',bestlambda);

Постройте график выбранных функций.

figure
plot(nca.FeatureWeights,'ro')
xlabel('Feature Index')
ylabel('Feature Weight')
grid on

Figure contains an axes. The axes contains an object of type line.

Большинство весов функций равны нулю. fsrnca определяет четыре наиболее релевантные функции.

Вычислите потери для тестового набора.

L = loss(nca,Xtest,ytest)
L = 0.0571

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

В этом примере используются данные Abalone, [3][4] из репозитория машинного обучения UCI [5]. Загрузите данные и сохраните их в текущей папке с именем 'abalone.data'.

Сохраните данные в таблице. Отобразите первые семь строк.

tbl = readtable('abalone.data','Filetype','text','ReadVariableNames',false);
tbl.Properties.VariableNames = {'Sex','Length','Diameter','Height', ...
    'WWeight','SWeight','VWeight','ShWeight','NoShellRings'};
tbl(1:7,:)
ans=7×9 table
     Sex     Length    Diameter    Height    WWeight    SWeight    VWeight    ShWeight    NoShellRings
    _____    ______    ________    ______    _______    _______    _______    ________    ____________

    {'M'}    0.455      0.365      0.095      0.514     0.2245      0.101       0.15           15     
    {'M'}     0.35      0.265       0.09     0.2255     0.0995     0.0485       0.07            7     
    {'F'}     0.53       0.42      0.135      0.677     0.2565     0.1415       0.21            9     
    {'M'}     0.44      0.365      0.125      0.516     0.2155      0.114      0.155           10     
    {'I'}     0.33      0.255       0.08      0.205     0.0895     0.0395      0.055            7     
    {'I'}    0.425        0.3      0.095     0.3515      0.141     0.0775       0.12            8     
    {'F'}     0.53      0.415       0.15     0.7775      0.237     0.1415       0.33           20     

Набор данных имеет 4177 наблюдений. Цель состоит в том, чтобы предсказать возраст абалоны из восьми физических измерений. Последняя переменная, количество интерпретатора звонков, показывает возраст абалоны. Первый предиктор является категориальной переменной. Последней переменной в таблице является переменная отклика.

Подготовьте предиктор и переменные отклика для fsrnca. Последний столбец tbl содержит количество интерпретатора звонков, которое является переменной отклика. Первая переменная предиктора, пол, категориальна. Вы должны создать фиктивные переменные.

y = table2array(tbl(:,end));
X(:,1:3) = dummyvar(categorical(tbl.Sex));
X = [X,table2array(tbl(:,2:end-1))];

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

rng('default') % For reproducibility
n = length(y);
cvp = cvpartition(n,'kfold',4);
numtestsets = cvp.NumTestSets;

cvpartition разделяет данные на четыре раздела (складки). В каждой складке около трех четвертей данных присваивается как набор обучающих данных, а одна четвертая - как тестовый набор.

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

lambdavals = linspace(0,25,20)*std(y)/n;
lossvals = zeros(length(lambdavals),numtestsets);

Строки lossvals соответствует λ значения и столбцы соответствуют складкам.

Подгонка модели NCA для регрессии с помощью fsrnca к данным из каждой складки с помощью каждой λ значение. Вычислите потери для каждой модели, используя тестовые данные из каждой складки.

for i = 1:length(lambdavals)
   for k = 1:numtestsets
       Xtrain = X(cvp.training(k),:);
       ytrain = y(cvp.training(k),:);
       Xtest = X(cvp.test(k),:);
       ytest = y(cvp.test(k),:);

       nca = fsrnca(Xtrain,ytrain,'FitMethod','exact', ...
				 'Solver','lbfgs','Lambda',lambdavals(i),'Standardize',true);

       lossvals(i,k) = loss(nca,Xtest,ytest,'LossFunction','mse');
    end
end

Вычислите средние потери для складок, то есть вычислите среднее значение во втором измерении lossvals.

meanloss = mean(lossvals,2);

Постройте график λ значения от средней потери от четырех складок.

figure
plot(lambdavals,meanloss,'ro-')
xlabel('Lambda')
ylabel('Loss (MSE)')
grid on

Найти λ значение, которое минимизирует средние потери.

[~,idx] = min(meanloss);
bestlambda = lambdavals(idx)
bestlambda = 0.0071

Вычислите лучшее значение потерь.

bestloss = meanloss(idx)
bestloss = 4.7799

Подгонка модели NCA на все данные с помощью лучших λ значение.

nca = fsrnca(X,y,'FitMethod','exact','Solver','lbfgs', ...
    'Verbose',1,'Lambda',bestlambda,'Standardize',true);
 o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|        0 |  2.469168e+00 |   1.266e-01 |   0.000e+00 |        |   4.741e+00 |   0.000e+00 |   YES  |
|        1 |  2.375166e+00 |   8.265e-02 |   7.268e-01 |    OK  |   1.054e+01 |   1.000e+00 |   YES  |
|        2 |  2.293528e+00 |   2.067e-02 |   2.034e+00 |    OK  |   1.569e+01 |   1.000e+00 |   YES  |
|        3 |  2.286703e+00 |   1.031e-02 |   3.158e-01 |    OK  |   2.213e+01 |   1.000e+00 |   YES  |
|        4 |  2.279928e+00 |   2.023e-02 |   9.374e-01 |    OK  |   1.953e+01 |   1.000e+00 |   YES  |
|        5 |  2.276258e+00 |   6.884e-03 |   2.497e-01 |    OK  |   1.439e+01 |   1.000e+00 |   YES  |
|        6 |  2.274358e+00 |   1.792e-03 |   4.010e-01 |    OK  |   3.109e+01 |   1.000e+00 |   YES  |
|        7 |  2.274105e+00 |   2.412e-03 |   2.399e-01 |    OK  |   3.557e+01 |   1.000e+00 |   YES  |
|        8 |  2.274073e+00 |   1.459e-03 |   7.684e-02 |    OK  |   1.356e+01 |   1.000e+00 |   YES  |
|        9 |  2.274050e+00 |   3.733e-04 |   3.797e-02 |    OK  |   1.725e+01 |   1.000e+00 |   YES  |
|       10 |  2.274043e+00 |   2.750e-04 |   1.379e-02 |    OK  |   2.445e+01 |   1.000e+00 |   YES  |
|       11 |  2.274027e+00 |   2.682e-04 |   5.701e-02 |    OK  |   7.386e+01 |   1.000e+00 |   YES  |
|       12 |  2.274020e+00 |   1.712e-04 |   4.107e-02 |    OK  |   9.461e+01 |   1.000e+00 |   YES  |
|       13 |  2.274014e+00 |   2.633e-04 |   6.720e-02 |    OK  |   7.469e+01 |   1.000e+00 |   YES  |
|       14 |  2.274012e+00 |   9.818e-05 |   2.263e-02 |    OK  |   3.275e+01 |   1.000e+00 |   YES  |
|       15 |  2.274012e+00 |   4.220e-05 |   6.188e-03 |    OK  |   2.799e+01 |   1.000e+00 |   YES  |
|       16 |  2.274012e+00 |   2.859e-05 |   4.979e-03 |    OK  |   6.628e+01 |   1.000e+00 |   YES  |
|       17 |  2.274011e+00 |   1.582e-05 |   6.767e-03 |    OK  |   1.439e+02 |   1.000e+00 |   YES  |
|       18 |  2.274011e+00 |   7.623e-06 |   4.311e-03 |    OK  |   1.211e+02 |   1.000e+00 |   YES  |
|       19 |  2.274011e+00 |   3.038e-06 |   2.528e-04 |    OK  |   1.798e+01 |   5.000e-01 |   YES  |

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|       20 |  2.274011e+00 |   6.710e-07 |   2.325e-04 |    OK  |   2.721e+01 |   1.000e+00 |   YES  |

         Infinity norm of the final gradient = 6.710e-07
              Two norm of the final step     = 2.325e-04, TolX   = 1.000e-06
Relative infinity norm of the final gradient = 6.710e-07, TolFun = 1.000e-06
EXIT: Local minimum found.

Постройте график выбранных функций.

figure
plot(nca.FeatureWeights,'ro')
xlabel('Feature Index')
ylabel('Feature Weight')
grid on

Нерелевантные функции имеют нулевые веса. Согласно этому рисунку, функциям 1, 3 и 9 не выбраны.

Подгонка модели регрессии Гауссова процесса (GPR) с помощью подмножества метода регрессоров для оценки параметра и полностью независимого условного метода для предсказания. Используйте квадратную функцию экспоненциального ядра ARD, которая присваивает индивидуальный вес каждому предиктору. Стандартизируйте предикторы.

gprMdl = fitrgp(tbl,'NoShellRings','KernelFunction','ardsquaredexponential', ...
      'FitMethod','sr','PredictMethod','fic','Standardize',true)
gprMdl = 
  RegressionGP
           PredictorNames: {'Sex'  'Length'  'Diameter'  'Height'  'WWeight'  'SWeight'  'VWeight'  'ShWeight'}
             ResponseName: 'NoShellRings'
    CategoricalPredictors: 1
        ResponseTransform: 'none'
          NumObservations: 4177
           KernelFunction: 'ARDSquaredExponential'
        KernelInformation: [1×1 struct]
            BasisFunction: 'Constant'
                     Beta: 11.4959
                    Sigma: 2.0282
        PredictorLocation: [10×1 double]
           PredictorScale: [10×1 double]
                    Alpha: [1000×1 double]
         ActiveSetVectors: [1000×10 double]
            PredictMethod: 'FIC'
            ActiveSetSize: 1000
                FitMethod: 'SR'
          ActiveSetMethod: 'Random'
        IsActiveSetVector: [4177×1 logical]
            LogLikelihood: -9.0019e+03
         ActiveSetHistory: [1×1 struct]
           BCDInformation: []


  Properties, Methods

Вычислите регрессионные потери на обучающих данных (реституционные потери) для обученной модели.

L = resubLoss(gprMdl)
L = 4.0306

Наименьшие перекрестные потери с использованием fsrnca сопоставим с потерями, полученными с помощью модели GPR с ядром ARD.

Входные параметры

свернуть все

Значения переменных предиктора, заданные как n -by - p матрица, где n - количество наблюдений, а p - количество переменных предиктора.

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

Значения отклика, заданные как численный вектор действительных чисел длины n, где n - количество наблюдений.

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

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

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

Пример: 'Solver','sgd','Weights',W,'Lambda',0.0003 задает решатель как стохастический градиентный спуск, веса наблюдений как значения в векторе W, и устанавливает параметр регуляризации на 0,0003.
Опции подбора кривой

свернуть все

Метод для подбора кривой модели, заданный как разделенная запятыми пара, состоящая из 'FitMethod' и одно из следующих:

  • 'exact' - Выполняет подбор кривой, используя все данные.

  • 'none' - Никакого подбора кривой. Используйте эту опцию, чтобы вычислить ошибку обобщения модели NCA с помощью начальных весов функций, предоставленных в вызове fsrnca.

  • 'average' - Разделяет данные на разделы (подмножества), подбирает каждый раздел используя exact метод и возвращает среднее значение весов функций. Вы можете задать количество разделов, используя NumPartitions аргумент пары "имя-значение".

Пример: 'FitMethod','none'

Количество разделов для разделения данных для использования с 'FitMethod','average' опция, заданная как разделенная разделенными запятой парами, состоящая из 'NumPartitions' и целое число значения между 2 и n, где n количество наблюдений.

Пример: 'NumPartitions',15

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

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

Когда количество наблюдений n увеличивается, вероятность сверхподбора кривой уменьшается, и необходимое количество регуляризации также уменьшается. Смотрите Tune Regularization Parameter в NCA для регрессии, чтобы узнать, как настроить параметр регуляризации.

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

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

Ширина ядра, заданная как разделенная разделенными запятой парами, состоящая из 'LengthScale' и положительный действительный скаляр.

Значение шкалы длины 1 разумно, когда все предикторы в одной шкале. Если предикторы в X имеют очень разные величины, затем рассмотрите стандартизацию значений предиктора с помощью 'Standardize',true и настройка 'LengthScale',1.

Пример: 'LengthScale',1.5

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

Начальные веса функций, заданные как разделенная разделенными запятой парами, состоящая из 'InitialFeatureWeights' и вектор < reservedrangesplaceholder1 > -на- действительных положительных скалярных величин > -на- действительных положительных скалярных величин, где p - количество предикторов в обучающих данных.

Регуляризованная целевая функция для оптимизации весов признаков является неконвексной. В результате использование различных начальных весов функций может дать различные результаты. Установка всех начальных весов функций равной 1 обычно работает хорошо, но в некоторых случаях случайная инициализация с использованием rand(p,1) может дать лучшие качественные решения.

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

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'ObservationWeights' и вектор n -by-1 действительных положительных скалярных величин. Используйте веса наблюдений, чтобы задать более высокую важность некоторых наблюдений по сравнению с другими. Веса по умолчанию присваивают равное значение всем наблюдениям.

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

Индикатор для стандартизации данных предиктора, заданный как разделенная разделенными запятой парами, состоящая из 'Standardize' и любой из них false или true. Для получения дополнительной информации смотрите Влияние Стандартизации.

Пример: 'Standardize',true

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

Индикатор уровня подробностей для итогового отображения сходимости, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose' и одно из следующих:

  • 0 - Нет сводных данных сходимости

  • 1 - сводные данные сходимости, включая норму значений градиента и целевой функции

  • > 1 - Больше информации о сходимости, в зависимости от алгоритма аппроксимации

    При использовании 'minibatch-lbfgs' решатель и уровень подробностей > 1, информация сходимости включает итерацию журнала от промежуточных мини-пакетных моделей LBFGS.

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

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

Тип решателя для оценки весов функций, заданный как разделенная разделенными запятой парами, состоящая из 'Solver' и одно из следующих:

  • 'lbfgs' - Алгоритм Broyden-Fletcher-Goldfarb-Shanno (LBFGS) с ограниченной памятью

  • 'sgd' - алгоритм Стохастического градиентного спуска (SGD)

  • 'minibatch-lbfgs' - Стохастический градиентный спуск с алгоритмом LBFGS, применяемым к мини-пакетам

По умолчанию это 'lbfgs' для n ≤ 1000 и 'sgd' для n > 1000.

Пример: 'solver','minibatch-lbfgs'

Функция потерь, заданная как разделенная разделенными запятой парами, состоящая из 'LossFunction' и одно из следующих:

  • 'mad' - Среднее абсолютное отклонение

    l(yi,yj)=|yiyj|.

  • 'mse' - Средняя квадратичная невязка

    l(yi,yj)=(yiyj)2.

  • 'epsiloninsensitive' - нечувствительная функция потерь

    l(yi,yj)=max(0,|yiyj|ϵ).

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

  • lossfun - Пользовательский указатель на функцию потерь. Функция потерь имеет эту форму.

    function L = lossfun(Yu,Yv)
    % calculation of loss
    ...
    Yu является вектором u -by-1 и Yv является вектором v -by-1. L является u -by - v матрицей значений потерь, такой что L(i,j) - значение потерь для Yu(i) и Yv(j).

Объективная функция для минимизации включает функцию потерь l (y i, <reservedrangesplaceholder1> <reservedrangesplaceholder0>) следующим образом:

f(w)=1ni=1nj=1,jinpijl(yi,yj)+λr=1pwr2,

где w - вектор веса функции, n - количество наблюдений, а p - количество переменных предиктора. p ij - это вероятность того, что x j является контрольной точкой для x i. Для получения дополнительной информации см. раздел «Выбор признаков NCA для регрессии».

Пример: 'LossFunction',@lossfun

Значение эпсилона для 'LossFunction','epsiloninsensitive' опция, заданная как разделенная разделенными запятой парами, состоящая из 'LossFunction' и неотрицательный действительный скаляр. Значение по умолчанию является оценкой стандартного отклонения выборки с использованием межквартильной области значений переменной отклика.

Пример: 'Epsilon',0.1

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

Размер памяти, в МБ, для расчета целевой функции и градиента, заданный как разделенная разделенными запятой парами, состоящая из 'CacheSize' и целое число.

Пример: 'CacheSize',1500MB

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

Опции LBFGS

свернуть все

Размер буфера истории для Hessian приближения для 'lbfgs' решатель, заданный как разделенная разделенными запятой парами, состоящая из 'HessianHistorySize' и положительное целое число. При каждой итерации функция использует самую последнюю HessianHistorySize итерации для построения приближения к обратному Гессиану.

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

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

Начальный размер шага для 'lbfgs' решатель, заданный как разделенная разделенными запятой парами, состоящая из 'InitialStepSize' и положительный действительный скаляр. По умолчанию функция определяет начальный размер шага автоматически.

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

Метод поиска по линии, заданный как разделенная разделенными запятой парами, состоящая из 'LineSearchMethod' и одно из следующих:

  • 'weakwolfe' - Слабый поиск линии Вульфа

  • 'strongwolfe' - Сильный поиск линии Вульфа

  • 'backtracking' - Поиск линии обратного отслеживания

Пример: 'LineSearchMethod','backtracking'

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

Пример: 'MaxLineSearchIterations',25

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

Относительный допуск сходимости по норме градиента для lbfgs решателя, заданная как разделенная разделенными запятой парами, состоящая из 'GradientTolerance' и положительный действительный скаляр.

Пример: 'GradientTolerance',0.000002

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

Опции SGD

свернуть все

Начальная скорость обучения для 'sgd' решатель, заданный как разделенная разделенными запятой парами, состоящая из 'InitialLearningRate' и положительный действительный скаляр.

При использовании типа решателя 'sgd', скорость обучения затухает над итерациями, начиная со значения, заданного для 'InitialLearningRate'.

Значение по умолчанию 'auto' означает, что начальная скорость обучения определяется с помощью экспериментов на небольших подмножествах данных. Используйте NumTuningIterations аргумент пары "имя-значение", чтобы задать количество итераций для автоматической настройки начальной скорости обучения. Используйте TuningSubsetSize аргумент пары "имя-значение" для задания количества наблюдений, используемых для автоматической настройки начальной скорости обучения.

Для типа решателя 'minibatch-lbfgs', можно задать 'InitialLearningRate' к очень высокому значению. В этом случае функция применяет LBFGS к каждому мини-пакету отдельно с начальными весами признаков из предыдущего мини-пакета.

Чтобы убедиться, что выбранная начальная скорость обучения уменьшает целевое значение с каждой итерацией, постройте график Iteration от Objective значения, сохраненные в mdl.FitInfo свойство.

Можно использовать refit метод с 'InitialFeatureWeights' равно mdl.FeatureWeights чтобы начать с текущего решения и запустить дополнительные итерации

Пример: 'InitialLearningRate',0.9

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

Количество наблюдений, используемых в каждом пакете для 'sgd' решатель, заданный как разделенная разделенными запятой парами, состоящая из 'MiniBatchSize' и положительное целое число от 1 до n.

Пример: 'MiniBatchSize',25

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

Максимальное количество проходов через все n наблюдения для 'sgd' решателя, заданная как разделенная разделенными запятой парами, состоящая из 'PassLimit' и положительное целое число. Каждый проход через все данные называется эпохой.

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

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

Частота партий для отображения сводных данных сходимости для 'sgd' решатель, заданный как разделенная разделенными запятой парами, состоящая из 'NumPrint' и положительное целое число. Этот аргумент применяется, когда 'Verbose' значение больше 0. NumPrint мини-пакеты обрабатываются для каждой линии сводных данных сходимости, отображаемой в командной строке.

Пример: 'NumPrint',5

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

Количество итераций настройки для 'sgd' решатель, заданный как разделенная разделенными запятой парами, состоящая из 'NumTuningIterations' и положительное целое число. Эта опция действительна только для 'InitialLearningRate','auto'.

Пример: 'NumTuningIterations',15

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

Количество наблюдений, используемых для настройки начальной скорости обучения, заданное как разделенная разделенными запятой парами, состоящая из 'TuningSubsetSize' и положительное целое значение от 1 до n. Эта опция действительна только для 'InitialLearningRate','auto'.

Пример: 'TuningSubsetSize',25

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

Опции SGD или LBFGS

свернуть все

Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'IterationLimit' и положительное целое число. Значение по умолчанию является 10000 для SGD и 1000 для LBFGS и мини-пакетных LBFGS.

Каждый проход через пакет является итерацией. Каждый проход через все данные является эпохой. Если данные разделены на k мини-пакета, то каждая эпоха эквивалентна k итерациям.

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

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

Допуск сходимости размера шага, заданный как разделенная разделенными запятой парами, состоящая из 'StepTolerance' и положительный действительный скаляр. The 'lbfgs' решатель использует абсолютный допуск шага, и 'sgd' решатель использует относительный допуск шага.

Пример: 'StepTolerance',0.000005

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

Мини-пакетные опции LBFGS

свернуть все

Максимальное количество итераций на мини-пакетный шаг LBFGS, заданное как разделенная разделенными запятой парами, состоящая из 'MiniBatchLBFGSIterations' и положительное целое число.

Пример: 'MiniBatchLBFGSIterations',15

Мини-пакетный алгоритм LBFGS является комбинацией методов SGD и LBFGS. Поэтому все аргументы пары "имя-значение", которые применяются к решателям SGD и LBFGS, также применяются к мини-пакетному алгоритму LBFGS.

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

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

свернуть все

Модель анализа компонентов окрестностей для регрессии, возвращенная как FeatureSelectionNCARegression объект.

Ссылки

[1] Rasmussen, C. E., R. M. Neal, G. E. Hinton, D. van Campand, M. Revow, Z. Ghahramani, R. Kustra, R. Tibshirani. Руководство DELVE, 1996, http://mlg.eng.cam.ac.uk/pub/pdf/RasNeaHinetal96.pdf.

[2] Университет Торонто, факультет компьютерных наук. Удаление наборов данных. http://www.cs.toronto.edu/~delve/data/datasets.html.

[3] Нэш, У. Дж., Т. Л. Селлерс, С. Р. Тальбот, А. Дж. Коуторн и У. Б. Форд. "Популяционная биология Абалоне (виды Haliotis) в Тасмании. I. Blacklip Abalone (H. rubra) с Северного побережья и островов пролива Басс ". Деление морского рыболовства, технический доклад № 48, 1994 год.

[4] Waugh, S. «Extending and Benchmarking Cascade-Correlation: Extensions to the Cascade-Correlation Architecture and Benchmarking of Feed-Forward Supervied Neural Networds». Тасманийский университет, кафедра компьютерных наук, 1995 год.

[5] Лихман, M. UCI Machine Learning Repository. Irvine, CA: University of California, School of Information and Computer Science, 2013. http://archive.ics.uci.edu/ml.

Введенный в R2016b