Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
1

По поводу Flexible Least Squares

26.01.2014, 18:29. Показов 1432. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Коллеги, добрый день.

Нашёл реализацию данного алгоритма:




Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
`fls` <-
function (A, b, mu=1, ncap=length(b), smoothed=TRUE)
{
  m <- nrow (A)
  n <- ncol (A)
  M <- array (0,c(n,n,ncap))
  E <- array (0,c(n,ncap))
  X <- array (0,c(n,ncap))
  R <- matrix(0,n,n)
  diag(R) <- diag(R) + mu
  for (j in 1:ncap) {
    Z <- solve(qr(R + tcrossprod(A[j,]),LAPACK=TRUE),diag(1.0,n));
    M[,,j] <- mu*Z             # (5.7b)
    v <- b[j]*A[j,]
    if(j==1) p <- rep(0,n)
    else p <- mu*E[,j-1]
    w <- p + v
    E[,j] <- Z %*% w           # (5.7c)
    R <- -mu*mu*Z
    diag(R) <- diag(R) + 2*mu
  }
# Calculate eqn (5.15) FLS estimate at ncap
  Q <- -mu*M[,,ncap-1]
  diag(Q) <- diag(Q) + mu
  Ancap <- A[ncap,,drop=FALSE]
  C <- Q + t(Ancap) %*% Ancap
  d <- mu*E[,ncap-1,drop=FALSE] + b[ncap]*t(Ancap)
  X[,ncap] <- C %*% d
  X[,ncap] <- solve(qr(C,LAPACK=TRUE),d)
  if (smoothed) {
# Use eqn (5.16) to obtain smoothed FLS estimates for 
# X[,1], X[,2], ..., X[,ncap-1]
    for (j in 1:(ncap-1)) {
      l <- ncap - j
      X[,l] <- E[,l] + M[,,l] %*% X[,l+1]
    }
  }
  else {
    X <- X[,ncap]
  }
  X
}
В итоге программа ругается уже на третьей строчке : nTS = size(inputTS.s, 2);

Подавая на вход объект типа timeseries, он возвращает ошибку, что якобы нет такого поля или метода s
Подскажите, пожалуйста - что делать? Или может быть у кого есть реализация данного метода?

Все исходники можно забрать здесь: https://mlalgorithms.svn.sourc... stSquares/
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2014, 18:29
Ответы с готовыми решениями:

GCC flexible array member
Добрый день. Уважаемые форумчане, подскажите мне непутевому одну должно быть простую вещь. Как в...

Flexible array member not at end of struct
Вот такой код: typedef struct q_query { char query; //тут ошибка short past_time; ...

Причины отсутствия flexible array member в плюсах
Очень простой вопрос - с чем связанно отсутствие flexible array member в стандарте плюсов? При том...

Создать mouseover effect для картинки с flexible grids
Я создала 2 в 1 картинку, где верхняя половина - mouseover, нижняя - неактивная. Мне необходимо...

10
318 / 257 / 30
Регистрация: 30.03.2013
Сообщений: 755
26.01.2014, 19:15 2
Лучший ответ Сообщение было отмечено puhlak как решение

Решение

Matlab M
1
2
3
4
5
6
7
8
function [ frc, parRet ] = algFlexibleLeastSquares( inputTS, idxHist, idxFrc, par )
% ALGFLEXIBLELEASTSQUARES
% forecast time series using FLS algorithm
%
% [ frc, parRet ] = algFlexibleLeastSquares( inputTS, idxHist, idxFrc, par )
%
% Arguments
% inputTS [struct] input data in format "ts"
написано что inputTS - это СТРУКТУРА в формате "ts"
Видимо нужно разобраться что это за формат "ts" и как в его формате делать структуру.

Там есть тестовый пример расчета ?

Добавлено через 10 минут
Matlab M
1
2
3
4
5
6
7
8
%Arguments
% ts - structure:
%   ts.s[T,N] - matrix of time series; forecasting time series is in the
%                 first column; other columns - additional time series
%   ts.t[T,1] - time in format datenum
%   ts.period[K,N] - periods of the time series ts.s
%   ts.legend[1,N] - description of the time series
%   ts.readme[string] - information about time series
В другом месте есть описание что такое 'ts' формат данных
https://svn.code.sf.net/p/mlal... alization/
1
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
27.01.2014, 09:43  [ТС] 3
sergsh, спасибо большое!

А вы не могли бы посмотреть, получаются ли у вас такие же результаты, как и у автора?

Я имею в виду функцию algFlexibleLeastSquares https://svn.code.sf.net/p/mlal... stSquares/

Исходный временной ряд можно забрать тут : https://svn.code.sf.net/p/mlal... s/Sources/

Я подгрузил его файл, tsMSFT_INTC.mat, далее открыл его pdf с результатами. Определил, что в качестве исторических значений берет с 1 по 100, а прогнозирует с 101 по 200. Но его метод вернул мне :
31.2677
31.3078
31.3048
31.3074
31.3066
31.3069
31.3068
31.3068
31.3068
31.3068
31.3068

...

31.3068
31.3068
31.3068
31.3068

Запускал так:
Matlab M
1
2
[frc, parRet] = algFlexibleLeastSquares(tsMSFT_INTC, (1:100)', (101:200)', struct('train', true, 'U', diag(repmat(1,1,1)), 'V', eye(1)));
frc.s
По идее автор использовал аналогичный набор параметров, ибо в pdf указано, что "в исходной работе используются единичные матрицы".

Добавлено через 10 часов 37 минут
Вроде работает функция forecastRetrospective.m, но я вчера не особо разобрался пока.
Сегодня буду сидеть и смотреть в дебаггере - работает оно или нет вообще.
0
318 / 257 / 30
Регистрация: 30.03.2013
Сообщений: 755
27.01.2014, 12:43 4
Лучший ответ Сообщение было отмечено puhlak как решение

Решение

Matlab M
1
2
3
load('tsMSFT_INTC.mat')
[frc, parRet] = algFlexibleLeastSquares(tsMSFT_INTC, (1:100)', (101:200)', struct('train', true, 'U', diag(repmat(1,1,1)), 'V', eye(1)));
frc.s
у меня выдает ошибку :

Undefined function 'runForward' for input arguments of type 'double'.

похоже что нет функции 'runForward'

Добавлено через 6 минут
функцию 'runForward' нашел

у меня получается такой же результат

31.2677
31.3078
31.3048
31.3074
31.3066
31.3069
31.3068

Добавлено через 3 минуты
Мне кажется для проверки нужно взять временной ряд, прогноз по которому заранее известен.
И сделать прогноз по такому ряду. Если совпадет - то программа работает правильно.

Добавлено через 12 минут
Matlab M
1
2
3
4
5
ss=frc.s;
tt=frc.t;
t=tt-min(tt);
figure, plot(1:100,ss,1:100,t);
corr(ss,t)
ans =

0.1748

Из графика и коэф корреляции видно что прогноз не работает
1
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
27.01.2014, 15:04  [ТС] 5
Цитата Сообщение от sergsh Посмотреть сообщение
Из графика и коэф корреляции видно что прогноз не работает
Спасибо! И последний вопрос - попробуйте воспользоваться функцией forecastRetrospective.m
Прогноз получается очень хороший - не могли бы вы посмотреть код? Там есть заглядывание в будущее?
0
318 / 257 / 30
Регистрация: 30.03.2013
Сообщений: 755
27.01.2014, 20:49 6
А вы с какими параметрами forecastRetrospective запускали ?

По коду про будущее так сразу и не поймешь ...
Вообще есть аксиома - будущее НЕ предсказуемо.
И Форекс ( и другие похожие разводилки ) это касается в наибольшей степени
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
27.01.2014, 20:51  [ТС] 7
Цитата Сообщение от sergsh Посмотреть сообщение
А вы с какими параметрами forecastRetrospective запускали ?
Аналогичными:

Matlab M
1
2
3
load('tsMSFT_INTC.mat')
[frc, parRet] = forecastRetrospective(tsMSFT_INTC, (1:100)', (101:200)', struct('train', true, 'U', diag(repmat(1,1,1)), 'V', eye(1)));
frc.s
Коллега, да я знаю прекрасно про форекс. Это мне для университетской работы нужно! На бирже я применяю анализ бухгалтерской отчетности

Если бы у меня не было опыта торговли на бирже - я бы принял эти красивые картинки как за истину. Но очень смущают они меня, поэтому и пишу тут.
0
318 / 257 / 30
Регистрация: 30.03.2013
Сообщений: 755
28.01.2014, 06:54 8
Выдает ошибку :

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
Error using  \
Matrix dimensions must agree.
 
Error in evaluateLOO (line 65)
        Q2(iTime) = {inv(H{iTime} * ((V \ Q2{iTime + 1}) \ (inv(V))') * H{iTime}' +
        inv(Q1{iTime} + lambda * V' * U * V) )};
 
Error in estimateLambda (line 44)
        currentLOO = evaluateLOO(currentLambda, y, C, U, V);
 
Error in forecastRetrospective (line 71)
        lambda = estimateLambda(y(1:T), C(:, 1:T), U, V);
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
28.01.2014, 08:46  [ТС] 9
У меня ошибок нет...

Коллеги, кто-нибудь ещё может попробовать посмотреть данный алгоритм?
0
318 / 257 / 30
Регистрация: 30.03.2013
Сообщений: 755
28.01.2014, 12:38 10
Так у меня работает

Matlab M
1
[frc, parRet] = forecastRetrospective(tsMSFT_INTC, (1:100)', (101:200)');
но прогноза нет


похоже что ошибка тут :
Matlab M
1
struct('train', true, 'U', diag(repmat(1,1,1)), 'V', eye(1))
У вас какая версия матлаб ? Может старая версия не ловит какие -то ошибки ...
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
28.01.2014, 14:41  [ТС] 11
Цитата Сообщение от sergsh Посмотреть сообщение
У вас какая версия матлаб ? Может старая версия не ловит какие -то ошибки ...
У меня матлаб 2011-2012 года, самый новый не стал устанавливать.
Картинка с прогнозом у меня совпала с картинкой автора, которая в файле msft.eps и PDF-е с описанием алгоритма.

Просто хочется понять - заглядывает ли программа в будущее или нет, а то прогноз уж больно хорош.
0
28.01.2014, 14:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2014, 14:41
Помогаю со студенческими работами здесь

Импорт проекта SIMATIC STEP7 WINCC flexible в TIA PORTAL V11
Здравствуйте, подскажите пожалуйста как открыть проект панели созданный WINCC flexible в программе...

Matlab Least-Squares Method "наименьших квадратов "
Здравствуйте! Я работаю над проектом по сканированию и распознаванию краев дороги с помощью лазера...

По поводу PR
Что такое PR и почему он, в отличие от тИЦ ограничен числом 10. Хотелось бы посмотреть на кол-во...

по поводу h1
Всем привет! У меня вопрос такого плана: Есть сайт www.gh-design.ru, который был пессимизирован...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru