Для большого числа наблюдений использование точного метода оценки параметров и составление прогнозов по новым данным может быть дорогостоящим (см. Точный метод GPR). Одним из методов аппроксимации, которые помогают решить эту проблему для прогнозирования, является метод блочного спуска координат (BCD). Можно делать прогнозы с помощью метода BCD, предварительно указав метод прогнозирования с помощью 'PredictMethod','bcd' аргумент пары имя-значение в вызове fitrgp, а затем с помощью predict функция.
Идея метода BCD состоит в вычислении
− 1 (y − Hβ)
по-другому, чем точный метод. BCD оценивает ^, решая следующую задачу оптимизации:
(α)
где
− αT (y − Hβ).
fitrgp использует снижение координат блока (BCD) для решения вышеуказанной задачи оптимизации. Для пользователей, знакомых с поддерживающими векторными машинами (SVM), последовательная минимальная оптимизация (SMO) и ISDA (итеративный алгоритм одиночных данных), используемые для подгонки SVM, являются особыми случаями BCD. fitrgp выполняет два шага для каждого обновления BCD - выбор блока и обновление блока. На этапе выбора блока fitrgp использует комбинацию случайных и жадных стратегий для выбора набора коэффициентов для оптимизации следующего. В фазе обновления блока выбранные оптимизируются при сохранении других фиксированными по отношению к их предыдущим значениям. Эти два шага повторяются до сходимости. BCD не сохраняет n , X) в памяти, но он просто вычисляет порции (X, X) матрицы по мере необходимости. В результате BCD является более эффективной памятью по сравнению с'PredictMethod','exact'.
Практический опыт показывает, что нет необходимости решать задачу оптимизации для вычисления с очень высокой точностью. Например, разумно останавливать итерации, когда | | опускается α0) | |, где α0 - начальное значение , а start- малая константа start= = 10 − 3). Результаты'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 ГБ оперативной памяти. Чтобы подогнать модель GPR к этому набору данных, используйте'FitMethod','sd' со случайным подмножеством m = 2000 точек. 'ActiveSetSize' аргумент пары имя-значение в вызове fitrgp указывает размер активного набора m. Для вычислительных
целей 'PredictMethod','bcd' с 'BlockSize' из 5000. 'BlockSize' аргумент пары имя-значение в fitrgp указывает количество элементов
вектора, оптимизируемых программой в каждой итерации. A 'BlockSize' из 5000 предполагает, что используемый компьютер может хранить матрицу 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] Гриппо, Л. и М. Сайандроне. «О сходимости блочного нелинейного метода gauss-seifel при выпуклых ограничениях». Письма об исследованиях операций. Том 26, стр. 127-136, 2000.
[2] Филиал, L. и К. Сминчисеску. «Снижение координат блока жадности для крупномасштабной регрессии гауссова процесса». В материалах двадцать четвертой Конференции по неопределенности в искусственном интеллекте (UAI2008): http://arxiv.org/abs/1206.3238, 2012.