Для большого количества наблюдений, с помощью точного метода в оценке параметра и делая предсказания на новых данных может быть дорогим (см. Точный Метод GPR). Один из методов приближения, что справка занимается этой проблемой для предсказания, является методом Спуска координаты блока (BCD). Можно сделать предсказания с помощью метода BCD первым определением предсказать метод с помощью 'PredictMethod','bcd'
аргумент пары "имя-значение" в вызове fitrgp
, и затем использование predict
функция.
Идея метода BCD состоит в том, чтобы вычислить
по-другому, чем точный метод. Оценки BCD путем решения следующей задачи оптимизации:
где
fitrgp
спуск координаты блока (BCD) использования, чтобы решить вышеупомянутую задачу оптимизации. Для пользователей, знакомых с машинами опорных векторов (SVMs), раньше соответствовали последовательная минимальная оптимизация (SMO) и ISDA (итеративный один алгоритм данных), SVMs являются особыми случаями BCD. fitrgp
выполняет два шага для каждого обновления BCD - обновление блока и выделение блока. В фазе выделения блока, fitrgp
использует комбинацию случайных и жадных стратегий выбора набора коэффициенты, чтобы оптимизировать затем. В блоке обновляют фазу, выбранное коэффициенты оптимизированы при хранении другого коэффициенты зафиксированы к их предыдущим значениям. Эти два шага повторяются до сходимости. BCD не хранит матрица в памяти, но это только вычисляет фрагменты матрицируйте по мере необходимости. В результате BCD является большей памятью, эффективной по сравнению с 'PredictMethod','exact'
.
Практический опыт указывает, что не необходимо решить задачу оптимизации для вычисления к очень высокой точности. Например, разумно остановить итерации когда отбрасывания ниже , где начальное значение и маленькая константа (сказать ). Результаты 'PredictMethod','exact'
и 'PredictMethod','bcd'
эквивалентны кроме BCD, вычисляет по-другому. Следовательно, 'PredictMethod','bcd'
может считаться памятью эффективный способ сделать 'PredictMethod','exact'
. BCD часто быстрее, чем 'PredictMethod','exact'
для большого n. Однако вы не можете вычислить интервалы предсказания с помощью 'PredictMethod','bcd'
опция. Это вызвано тем, что вычислительные интервалы предсказания требуют решения задачи как та, решенная для вычисления для каждой тестовой точки, которая снова является дорогой.
Этот пример показывает подбор кривой модели Gaussian Process Regression (GPR) данным с большим количеством наблюдений, с помощью Приближения Спуска координаты блока (BCD).
Маленький n - PredictMethod
'exact'
и 'bcd'
Приведите к тем же результатам
Сгенерируйте набор данных небольшой выборки.
rng(0,'twister');
n = 1000;
X = linspace(0,1,n)';
X = [X,X.^2];
y = 1 + X*[1;2] + sin(20*X*[1;-2])./(X(:,1)+1) + 0.2*randn(n,1);
Создайте модель GPR с помощью 'FitMethod','exact'
и 'PredictMethod','exact'
.
gpr = fitrgp(X,y,'KernelFunction','squaredexponential',... 'FitMethod','exact','PredictMethod','exact');
Создайте другую модель GPR с помощью 'FitMethod','exact'
и 'PredictMethod','bcd'
.
gprbcd = fitrgp(X,y,'KernelFunction','squaredexponential',... 'FitMethod','exact','PredictMethod','bcd','BlockSize',200);
'PredictMethod','exact'
и 'PredictMethod','bcd'
должно быть эквивалентным. Они вычисляют то же самое, но только по-разному. Можно также видеть итерации при помощи 'Verbose',1
аргумент пары "имя-значение" в вызове fitrgp
.
Вычислите подходящие значения с помощью этих двух методов и сравните их:
ypred = resubPredict(gpr); ypredbcd = resubPredict(gprbcd); max(abs(ypred-ypredbcd))
ans = 5.8853e-04
Подходящие значения друг близко к другу.
Теперь отобразите данные на графике наряду с подходящими значениями для 'PredictMethod','exact'
и 'PredictMethod','bcd'
.
figure; plot(y,'k.'); hold on; plot(ypred,'b-','LineWidth',2); plot(ypredbcd,'m--','LineWidth',2); legend('Data','PredictMethod Exact','PredictMethod BCD','Location','Best'); xlabel('Observation index'); ylabel('Response value');
Это видно тот 'PredictMethod','exact'
и 'PredictMethod','bcd'
произведите почти идентичные подгонки.
Большой n - Использование 'FitMethod','sd'
и 'PredictMethod','bcd'
Сгенерируйте больший набор данных, похожий на предыдущий.
rng(0,'twister');
n = 50000;
X = linspace(0,1,n)';
X = [X,X.^2];
y = 1 + X*[1;2] + sin(20*X*[1;-2])./(X(:,1)+1) + 0.2*randn(n,1);
Для n = 50000, матрица K (X, X) была бы 50000 50000. Хранение K (X, X) в памяти потребовало бы приблизительно 20 Гбайт RAM. Чтобы подбирать модель GPR к этому набору данных, используйте 'FitMethod','sd'
со случайным подмножеством m = 2 000 точек. 'ActiveSetSize'
аргумент пары "имя-значение" в вызове fitrgp
задает активный размер набора m. Для вычисления использования 'PredictMethod','bcd'
с 'BlockSize'
из 5 000. 'BlockSize'
аргумент пары "имя-значение" в fitrgp
задает число элементов вектора, который программное обеспечение оптимизирует в каждой итерации. 'BlockSize'
из 5 000 принимает, что компьютер, который вы используете, может сохранить 5000 5000 матрица в памяти.
gprbcd = fitrgp(X,y,'KernelFunction','squaredexponential',..., 'FitMethod','sd','ActiveSetSize',2000,'PredictMethod','bcd','BlockSize',5000);
Отобразите на графике данные и подходящие значения.
figure; plot(y,'k.'); hold on; plot(resubPredict(gprbcd),'m-','LineWidth',2); legend('Data','PredictMethod BCD','Location','Best'); xlabel('Observation index'); ylabel('Response value');
График похож на тот для меньшего n.
[1] Grippo, L. и М. Скиэндроун. На сходимости блока нелинейный метод гаусса-seifel при выпуклых ограничениях. Буквы Исследования операций. Издание 26, стр 127–136, 2000.
[2] Филиал, L. и К. Сминчисеску. Блок Greed координирует спуск для крупномасштабной Гауссовой регрессии процесса. В Продолжениях Двадцать четвертой Конференции по Неопределенности в Искусственном интеллекте (UAI2008): http://arxiv.org/abs/1206.3238, 2012.