Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 211
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1) К сожалению, вы неполно сформулировали вопрос и получили непроработанный и краткий вежливый ответ "это не имеет значения".
Вы хотели получить ответ "так договорились/convention", сформулировав его в самом вопросе. Но Дункан ушел от ответа "что есть правильно" в первый раз, а во второй раз повторил его.
2) Вы не получили подтверждения точности в R и не получили ответа, почему в других пакетах результат другой. Разбор вопроса "почему в других пакетах ответ другой" более важен и способен раскрыть тему.
3) Наша позиция:
выражение для dgamma
(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)
for x ≥ 0, a > 0 and s > 0в точке 0 является неопределенным.
В R считают, что можно включать эту точку в расчет, но при этом взять предельные значения, даже если они равны бесконечности как в случае dgamma(0,0.5,1).
Однако, если рассчитывать вероятности с учетом бесконечности в нулевой точке, все интегралы от dgamma формально становятся бесконечными и по этой логике pgamma должна быть равна бесконечности для всех значений x.
Однако это противоречит результатам pgamma, где все значения оказываются конечными. Они правильные, будто в точке x=0 считается что плотность =0.1) Да, я не получил развернутого ответа. Хотя подводил под это... Я не навязываю своего мнения, спорить тоже устал, если честно. Обращу ваше внимание, что слова этого человека почти дословно совпали с нашим изначальным посылом. Как определить в крайней точки плотность не важно, главное, чтобы правильно считались интегралы:
Заявляем, что строго говоря, плотность гамма распределения в точке ноль не определена. А при взятии предела справа плотность равна единице.
В свете этого мы считаем, то формулировка утверждения "ошибки расчетов в R" не является корректной. Точнее, это вопрос конвенций: чем считать равной выражение ноль в степени ноль. Приравнивание плотности гамма распределения к нулю в точке ноль не представляется сколько-либо обусловленной практикой.
2) Про точность разговор даже не велся с моей стороны. Плотность в точке ноль - это не про точность; это про то, как вы ее выведете в результате работы функции - несходимость (NaN) или приравняете к пределу или к нулю. Главное, что это не важно для расчета интеграла.
3) Перечитал исправленный текст статьи. И я рад, что ошибкой поведение dgamma вы решили не считать.
Но вот это :
все интегралы от dgamma формально становятся бесконечными и по этой логике pgamma должна быть равна бесконечности для всех значений x.
странно, Ренат.
pgamma в принципе не может быть бесконечной, так как ингеграл ограчена сверху значением 1.
Возьмем нормальное распределение. Оно определено на [-inf,+inf]. Интеграл функции распределения = 1 на всем этом промежутке. Но как-то получается, что суммирование (интегрирование) плотности на бесконечно большом саппорте не выливается в бесконечную сумму. Хотя плотность на всем саппорте != 0 ни в какой области.
А для dgmamma точка x ==0 с ее плотностью == inf (а кстати, вы никак не обошли вниманием случай, где плотность стремиться к 1 в этой точке и какие из этого вы делаете выводы об интегрировании...) как часто встречается? Скажу - никак. Вероятность реализации случ.величины любой точке == 0 в любом непрерывном распределении... Это знают все статистики. Плотность считается приближением вероятности к бесконечно малой области вокруг x.
Из этого факта следует, что какая бы огромная плотность ни была в крайней точке, ее влияние на полный инграл = 0. Подумайте...
Думаю, вы перемудрили. ) Но спорить и разбираться не собираюсь. Может когда-то это осознаю и сам вместо Дункана отвечу. )
Спасибо.
R - потрясающая система, которая лично мне открыла глаза на то, как далеки мы были в MetaTrader/MQL от реальных потребностей "сделать сложные вычисления просто и прям сейчас".
У нас (С++ девелоперов) в крови подход "все можете сделать сами, а мы даем низкоуровневую базу и скорость вычислений". Мы фанатично относимся к производительности и у нас получается - MQL5 на 64 битах великолепен.
Когда я сам лично засел за R, то понял - нужно как можно больше мощных функций в одну строку и вообще дать возможность заниматься исследованиями.
Поэтому мы сделали резкий поворот и начали апгрейд MetaTrader 5:
Конечно, мы в начале пути, но уже понятен правильный вектор приложения сил.
7 шагов при интегрировании это конечно мало. Вот 1000:
[1] 0.7940968
#а теперь велосипедное интегрирование:
> integration_steps <- seq(0, 0.8, length.out=1001)
> integration_result <- 0
> for(i in 2:length(integration_steps)){
+ integration_result <- integration_result + dgamma(integration_steps[i], 0.5, 1) * (integration_steps[i] - integration_steps[i-1])
+ }
> integration_result
[1] 0.7709089
#погрешность ~0.02, но тут способ уже проще некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
1) Да, я не получил развернутого ответа. Хотя подводил под это... Я не навязываю своего мнения, спорить тоже устал, если честно. Обращу ваше внимание, что слова этого человека почти дословно совпали с нашим изначальным посылом.
Это был вежливый ответ без деталей и проверки. И ответ не совпал с Wolfram Alpha и Matlab, что является проблемой.
Уходить в сторону не надо - корневой вопрос был четко обозначен.
#погрешность ~0.02, но тут способ уже велосипедней некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
Проинтегрируйте функцию 1/x, от 0 до 1, включая граничные точки и сравните с результатом аналитических расчетов.
Wolfram говорит что интеграл не сойдется из-за сингулярности в точке x=0.
Проинтегрируйте функцию 1/x, от 0 до 1, включая граничные точки и сравните с результатом аналитических расчетов.
С тем-же кодом - 7.485471. R дошёл до 76.3342 и сказал что дальше не пойдёт, и это не точный результат, и неправильный. Вольфрам просто сразу сказал что результат не сходится и ничего не ответил.
Правильный ответ я не знаю, сколько?
Только не говорите что раз интеграл 1/x не нашёлся, то и интеграл dgamma(x) тоже не найдётся. Обе эти функции хоть и стремятся к бесконечности при x -> 0+ , но стремятся они с разной скоростью, и эта скорость влияет на то можно ли найти интеграл. или нет
Есть функция -log(x). Она стремится в бесконечность при x->0. Можно и без минуса, тогда она будет стремится вниз, мне так неудобно.
И у неё находится интеграл от 0 до 1. Бесконечность не мешает.
R - потрясающая система, которая лично мне открыла глаза на то, как далеки мы были в MetaTrader/MQL от реальных потребностей "сделать сложные вычисления просто и прям сейчас".
...
Поэтому мы сделали резкий поворот и начали апгрейд MetaTrader 5:
Конечно, мы в начале пути, но уже понятен правильный вектор приложения сил.
R, как и многие другие ЯП, пока более удобен для машинного обучения по сравнению с MQL за счёт того, что в нём заведомо предусмотрен функционал для обработки данных в виде массивов. Дело в том, что выборка для машинного обучения - это чаще всего двумерный массив данных, а соответственно необходим функционал для работы с массивами:
А пока в MQL не будет реализован вышеуказанный функционал необходимый для обработки выборок в виде массивов, то значительная часть разработчиков алгоритмов машинного обучения предпочтёт другие ЯП, в которых всё это уже давно имеется в наличии. Или будет пользоваться неприхотливым MLP (алгоритмом 60-х годов прошлого века) из библиотеки AlgLib, в котором, если мне не изменяет память, для удобства двумерные массивы представлены в виде одномерных.
Конечно же функции плотностей случайных распределений - это тоже необходимый функционал. Но такие функции не всегда необходимы в задачах машинного обучения, а в некоторых и вообще не применяются. А вот операции с выборками, как с многомерными массивами - это то, без чего реализация алгоритмов машинного обучения не обходится ни для одной задачи, если конечно же это не задача обучить сетку вызубрить заведомо нормированные данные из тривиального ХОR.
R - потрясающая система, которая лично мне открыла глаза на то, как далеки мы были в MetaTrader/MQL от реальных потребностей "сделать сложные вычисления просто и прям сейчас".
У нас (С++ девелоперов) в крови подход "все можете сделать сами, а мы даем низкоуровневую базу и скорость вычислений". Мы фанатично относимся к производительности и у нас получается - MQL5 на 64 битах великолепен.
Когда я сам лично засел за R, то понял - нужно как можно больше мощных функций в одну строку и вообще дать возможность заниматься исследованиями.
Поэтому мы сделали резкий поворот и начали апгрейд MetaTrader 5:
Конечно, мы в начале пути, но уже понятен правильный вектор приложения сил.
Это взвешенная и на удивление объективная оценка R.
Конструктивная часть дискуссии не пропала даром. Вы прислушивайтесь к замечаниям и предложениям пользователей R. Мы тоже заинтересованы в улучшении платформы.
Конечно Вы в начале пути но в любом случае "прививки" от R усилят МКЛ.
Удачи в Вашем нелегком деле.
По поводу конвенций, о которых говорил Бурнаков.
Рассмотрим три совершенно разных случая.
1. Деление на константу, равную нулю.
В R мы имеем результат
[1] Inf
Правильный это результат?
Для интерпретатора - это результат следует считать правильным, так как по любому нельзя прекращать работу среды R
Для компилятора возникают вопросы. И правильным следует считать возникновение исключительной ситуации, прерывается исполнение программы и управление передается на обработку этой исключительной ситуации, в противном аварийное завершение.
Заметим насколько отличается!
2. Деление на переменную, равную нулю.
> 1/a
[1] Inf
Строго говоря этот вариант отличается от предыдущего.
Функция 1/а непрерывна везде, кроме а=0. причем в этой точке предел слева = -Inf, а предел справа = +Inf.
R этого не понимает, но можно смириться так как различие между минус бесконечность и плюс бесконечность имеет смысл в математике, а не в программном коде
3. Деление двух бесконечно малых величин при их стремлении к нулю
[1] NaN
Значение NaN вообще для меня не имеет объяснения. Но совершенно ясно с учетом п.2, что R не понимает пределов как таковых.
Это ошибки R как системы программирования? Не знаю. Скорее всего в документации R надо было бы информировать о таких нюансах, но как это потом реализовать при децентрализованной разработке на данных момент около 130 000 функций? А нужно?
Что из этого следует в смысле возникшей дискуссии?
На берегу принимаются решения.
1. Берем R и тупо переносим в МКЛ код. При этом отдаем себе отчет, что перечисленные выше варианты в разных функциях R может иметь разное толкование
2. Объявляем соглашения какие значения будут приниматься в перечисленных мною (может быть список не полон) случаях. Тщательно проверяем код R и в случае не соответствия нашим установкам портируем из R в МКЛ с исправлениями согласно нами установленными соглашениями. При этом за счет централизации разработки последовательно выполняем принятые соглашения и в этом смысле имеем более качественную систему.