в теории теория и практика неразделимы на практике это не так

50 цитат о программировании всех времён

Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

50. Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы больше и с лучшей идиотоустойчивостью, и вселенной, которая пытается создавать больших и лучших идиотов. Пока вселенная побеждает.
— Rick Cook

49. Lisp — это не язык, а строительный материал.
— Alan Kay

48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard

47. Они больше не делают баги, как Банни (Bugs Bunny).
— Olav Mjelde.

46. Низкоуровневый язык — это когда требуется внимание к вещам, которые никак не связаны с программами на этом языке.
— Alan J. Perlis.

45. Программирование на С похоже на быстрые танцы на только что отполированном полу людей с острыми бритвами в руках
— Waldi Ravens.

44. Я всегда мечтал о том, чтобы моим компьютером можно было пользоваться так же легко, как телефоном; моя мечта сбылась: я уже не могу разобраться, как пользоваться моим телефоном.
— Bjarne Stroustrup

43. Обучение программированию не может научить быть экспертом, также как и изучение кистей и красок не может превратить кого-либо в художника.
— Eric S. Raymond

42. Не волнуйтесь, если что-то не работает. Если бы всё работало, вас бы уволили.
— Mosher’s Law of Software Engineering

40. Хорошо, Java, ВОЗМОЖНО, хороший пример того как должен выглядеть язык. Но тогда программы на Java — это хороший пример как НЕЛЬЗЯ писать программы.
— pixadel

39. Учитывая текущее плачевное состояние наших программ, можно сказать, что программирование определенно все ещё черная магия и, пока, мы не можем называть его технической дисциплиной.
— Bill Clinton

38. Использование COBOL калечит разум; исходя из этого, обучение этому языку должно быть признано уголовно наказуемым преступлением.

37. версия «спагетти кода» — это, конечно, «лазанья код» (очень много слоев).
— Roberto Waltman

36. FORTRAN — это не цветок, а сорняк: он вынослив, иногда расцветает и произрастает в каждом компьютере
— Alan J. Perlis.

35. Для меня долгое время было загадкой, как очень дорогое и технологичное может быть столь бесполезным. И вскоре я осознал, что компьютер — это глупая машина, обладающая способностями выполнять невероятно умные вещи, тогда как программисты — это умные люди, у которых талант делать невероятные глупости. Короче, они нашли друг друга.
— Bill Bryson

34. По моему эгоистическому мнению, большинство программ на C должны быть отформатированы с отступами на 2 метра вниз и засыпанными землей.
— Blair P. Houghton.

33. Когда говорит: «Я хочу язык программирования, который может делать все, что ему скажу», то я даю этому человеку леденец.
— Alan J. Perlis

32. Эволюция языков: FORTRAN — не строго типизированный язык, С — слабо типизированный язык. Ada — сильно типизированный язык. С++ — сильно раздутый язык.
— Ron Sercely

31. В хорошем дизайне добавление вещи стоит дешевле, чем сама эта вещь.
— Thomas C. Gale

30. Если называть Python заменой BASIC, то тогда и трансформер Optimus Prime — это только замена грузовика.
— Cory Dodt

29. Болтовня ничего не стоит. Покажите мне код.
— Linus Torvalds

28. Как видно, совершенство достигается не тогда, когда уже нечего прибавить, но когда уже ничего нельзя отнять.
— Antoine de éry

27. С — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.

26. В теории, теория и практика неразделимы. На практике это не так.
— Yoggi Berra

25. Вы не можете создавать хорошие программы без хорошей команды, но большинство софтверных команд ведут себя как проблемная семья.
— Jim McCarthy

23. Программирование — это как бить себя по лицу, рано или поздно ваш нос будет кровоточить.
— Kyle Woodbury

22. Perl — это тот язык, который одинаково выглядит как до, так и после RSA шифрования…
— Keith Bostic

21. Намного легче портировать шелл, чем скрипт на шелле.
— Larry Wall

20. Я изобрел понятие «объектно-ориентированный», но могу заявить, что не имел в виду C++ при этом.
— Alan Kay

19. Изучение программирования имеет такое же отношение к проектированию интерактивных систем, как обучение слепой печати к написанию стихов.
— Ted Nelson

18. Лучшие программисты не чуть-чуть лучше хороших. Они на порядок лучше по любым меркам: концептуальное мышление, скорость, изобретательность и способность находить решения.
— Randall E. Stross

17. Если бы McDonalds была бы софтверной компанией, то у них один из ста Биг Маков был бы отравленным, и их ответ на это был бы: «Мы сожалеем, вот вам купон на ещё два Биг Мака.»
— Mark Minasi

16. Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

15. Анализ компьютерных систем — это как воспитание детей; можно нанести огромный вред, но нельзя гарантировать успех.
— Tom DeMarco

14. Меня не интересует, будет ли это работаеть на ваших машинах! Мы не отдаем их заказчику!
— Vidiu Platon.

13. Иногда лучше остаться спать дома в понедельник, чем провести всю неделю отлаживая написанный в понедельник код.
— Christopher Thompson

12. Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу.
— Bill Gates

11. Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
— Brian W. Kernighan.

10.Люди считают, что программирование — это наука избранных, но в реальности все наоборот — просто много людей создают программы, которые используют чужие программы, как-будто строя стену из маленьких кирпичиков.
— Donald Knuth

9. Сначала учите науку программирования и всю теорию. Далее выработаете свой программистский стиль. Затем забудьте все и просто программируйте.
— George Carrette

8. Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня.
— Larry Wall

7. Большинство программ на сегодняшний день подобны египетским пирамидам из миллиона кирпичиков друг на друге и без конструктивной целостности — они просто построены грубой силой и тысячами рабов.
— Alan Kay

6. Трудность работы с програмистом заключается в том, что вы не можете понять что он делает до тех пор пока не стало слишком поздно.
— Seymour Cray

5. Итерация свойственна человеку, рекурсия божественна.
— L. Peter Deutsch

4. Меня два раза спрашивали [члены Парламента]: «Скажите на милось, мистер Бэббидж, что случится, если вы введете в машину неверные цифры? Cможем ли мы получить правильный ответ?» Я не могу себе даже представить какая путаница в голове может привести к подобному вопросу.
— Charles Babbage

3. Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
— Linus Torvalds

2. Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
— Martin Golding

1. Есть два способа создания дизайна программы. Один из них, это сделать его настолько простым, что в нем, очевидно, не будет недостатков. Другой способ — сделать его настолько запутанным, что в нем не будет очевидных недостатков.
— C.

Источник

В теории теория и практика неразделимы на практике это не так

Дзен-буддизм и психоанализ

Стремление к благополучию человека через изучение его природы – эта общая черта, присущая как дзен-буддизму, так и психоанализу, – наиболее часто упоминается при сравнении этих систем, отражающих особенности западного и восточного менталитета. Дзен-буддизм сочетает в себе индийское иррациональное начало с китайской конкретностью и реализмом. Психоанализ же, основываясь на западном гуманизме и рационализме, с одной стороны, и романтическом поиске неподвластных рациональному осмыслению таинственных сил, характерном для XIX века, – с другой, является феноменом исключительно западного мира. Можно сказать, что этот научно-терапевтический метод изучения человека есть плод греческой мудрости и иудейской этики.

Изучение человеческой природы в теории и перевоплощение человека на практике – пожалуй, одна из немногих черт, объединяющих психоанализ и дзен-буддизм. Различий же, очевидно, больше. Во-первых, психоанализ представляет собой научный метод, не имеющий отношения к религии. Дзен же с позиции западной культуры со своей теорией и методикой «просветления» человека выглядит религиозным, или мистическим, учением. Психоанализ – это терапия душевных заболеваний, а дзен – путь к спасению души. Итак, сопоставляя психоанализ и дзен-буддизм, разве мы не приходим к выводу, что в основе своей они не имеют ничего общего, а, напротив, принципиально отличаются друг от друга?

Несмотря на это, дзен-буддизм вызывает все больший интерес со стороны психоаналитиков[1]. Чем вызван этот интерес и какой он имеет смысл? Задача настоящей статьи – ответить на эти вопросы. Безусловно, здесь не будет представлено фундаментальное описание дзен-буддистского мышления – моих знаний и опыта для этого недостаточно. В то же время в данной статье я не ставлю задачу дать полное представление о психоанализе. Однако в первой части моей работы я подробнее остановлюсь на тех аспектах психоанализа, которые я назвал «гуманистическим психоанализом» и которые являются одним из продолжений фрейдовского психоанализа. Тем самым я постараюсь объяснить, почему столкновение с дзен-буддизмом стало столь важным как для меня, так и, по моему мнению, для всех, кто имеет дело с психоанализом.

I. Духовный кризис и значение психоанализа

Изучая интересующий нас вопрос, в первую очередь необходимо обратить внимание на духовный кризис современного западного человека и психоанализ как один из инструментов преодоления этого кризиса. Большинство людей, принадлежащих к западной культуре, в той или иной степени испытывают на себе влияние кризиса, сами не осознавая этого в полной мере. Тем не менее специалисты вполне единодушны как в признании существования настоящего кризиса, так и в определении его сущности. Этот феномен определяется понятиями «нездоровье» («malaise»), «скука» («ennui»), «болезнь века» (maladie du siècle). Речь идет об апатии, автоматичности человека, самоотчужденности, потере связи с другими индивидами и природой. Рационализм ставился человеком во главу угла до того времени, пока не приобрел в высшей степени иррациональные черты. Эпоха Декарта положила начало четкому разделению мышления и чувства: мышление рационально, в то время как чувство само по себе иррационально. Воплощение одного лишь интеллекта, человеческая личность призвана осуществлять контроль над природой. Смыслом существования становится производство все возрастающего числа материальных ценностей. При этом человек сам превращается в вещь, а обладание – в смысл жизни. «Иметь» теперь важнее, чем «быть». В то время как совершенствование человека было смыслом существования в греческой и иудейской идеологии, основы которой свойственны западной цивилизации, современный человек считает целью своей жизни усовершенствование технологии производства вещей. Осознавая свою неспособность разрешить противоречие между мышлением и чувствами, человек западного мира охвачен беспокойством, он подавлен и пребывает в отчаянии. Если на словах он называет жизненными ценностями богатство, самобытность и предприимчивость, то в действительности он не имеет реальной цели в жизни. На вопрос о цели существования и смысле испытываемых им в жизни трудностей западный человек не сможет дать вразумительного ответа. Среди наиболее вероятных ответов – жизнь ради семьи, ради получения удовольствий, ради зарабатывания денег… В действительности же никто не видит реального смысла своей жизни. Опасность и одиночество – вот то, чего человек стремится избежать априори.

В наши дни принадлежность человека к Церкви становится в некотором отношении все более значимой, религиозные книги становятся бестселлерами, все больше людей обращаются к Богу. Однако эта видимая религиозность обусловлена в действительности отнюдь не духовными, а чисто материалистическими и нерелигиозными аспектами. Этот феномен можно рассматривать как вызванную конформизмом и стремлением к безопасности идеологическую реакцию человека на характерную для XIX века тенденцию, которую выразил Ницше: «Бог умер». Говорить об истинной религиозности здесь не приходится.

Произошедший в XIX веке отказ от теистических постулатов имел во многом прогрессивный характер. Понятие объективности стало определяющим: Земля больше не центр Вселенной, а человек – не «венец творения». Фрейд, исследуя скрытые мотивы поведения человека через призму новых жизненных реалий, пришел к выводу, что всепоглощающая вера в Бога основывалась на беспомощности человека, его незащищенности. При этом человек уповал на поддержку отца и матери, воплощаемых им в божественном образе. По мысли Фрей да, человек способен спасти себя лишь сам, в то время как наставления великих учителей и участие близких может лишь поддержать его, помочь принять вызов судьбы, чтобы приобрести силы для борьбы с жизненными невзгодами.

Человек больше не видит Бога в образе отца и утрачивает тем самым родительскую поддержку в его лице. Одновременно для него перестают существовать и истины постулатов всех великих религий. Речь идет о преодолении человеком эгоистической ограниченности, стремлении к любви, объективности, смирению и уважению к жизни – а это уже само по себе можно рассматривать как цель и как результат реализации человеком заложенного в нем потенциала, что составляет цель как великих западных, так и великих восточных религий. Отметим, что на Востоке отсутствовало понятие трансцендентального отца-Спасителя, свойственного монотеистическим религиям. Рациональность и реализм были присущи даосизму и буддизму в большей степени, чем религиям Запада. На Востоке человек добровольно, без принуждения присоединяется к «пробужденным», ибо каждый человек потенциально способен к пробуждению и просветлению. Именно поэтому восточное религиозное мышление, воплощенное в даосизме, буддизме и дзен-буддизме как их синтезе, имеет в наши дни столь большое значение для западной культуры. Благодаря дзен-буддизму человек оказывается способным найти ответ на вопрос о смысле своего существования, причем ответ этот в основе своей не входит в принципиальные противоречия как с традиционными иудео-христианскими представлениями, с одной стороны, так и с такими ценностями современного человека, как рациональность, реализм и независимость – с другой. Таким образом, как это ни парадоксально, но восточные религиозные представления оказываются, в сравнении с западными, ближе по духу западному рациональному мышлению.

II. Ценности и задачи психоаналитической концепции Фрейда

Психоанализ представляет собой типичное проявление духовного кризиса западного человека и в то же время показывает возможность выхода из этого кризиса. Современные направления психоанализа – «гуманистическое» и «экзистенциальное» – служат тому ярким примером. Однако перед тем, как приступить к рассмотрению моей «гуманистической» концепции, я хотел бы подчеркнуть, что разработанная самим Фрейдом система не ограничивается, несмотря на широко распространенное убеждение, рамками понятий «болезнь» и «лечение». Она представляет собой в первую очередь концепцию спасения человека, а не лечения душевнобольных людей. При поверхностном подходе возникает ощущение, что Фрейд просто изобрел новый способ лечения психических заболеваний и что как раз это было основным предметом его исследований, став в итоге делом всей жизни ученого. Тем не менее при ближайшем рассмотрении оказывается, что медицинские под ходы в лечении неврозов скрывают абсолютно другую идею, которую сам Фрейд редко формулировал в явной форме, а возможно, и не всегда ее осознавал. Что же это за идея? В чем заключается концепция «психоаналитического движения» Фрейда и что стало отправной точкой этого движения?

Источник

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не такmetacode_ru

МетаКод

Последняя теоретическая итерация/обобщение перед переходом к практике, остальные детали уточним в процессе.

1) Прежде всего, в исходных требованиях, ТЗ, надо избавиться от императивности. Это требования, где имеются условия, и подразумевается использование переменных, сохранение внутренних состояний. Для этого, призовем на помощь любимые монады и монады монад:)

2) Так как мы планируем поддерживать примерно однозначное соответствие между ТЗ на естественном языке и кодом программы, дополнительных сущностей типа иерархий классов вводить не будем, да и уровень абстрагирования будем всячески понижать (точнее, не повышать). ООП задействуем, но исключительно для инкапсуляции, наглядности, скорее чтобы простую модульность обеспечить. Моменты, решаемые в ООП наследованием, обойдем функционально, например, делегированием функций, дабы не создавать иерархию из тысяч классов, если проект большой. Общую архитектуру постараемся выдерживать в REST-духе.

3) Соответственно, и проблемные моменты, где предлагают призывать на помощь аспектно-ориентированное программирование, будем также обходить функционально, с помощью того же ортогонального делегирования.

4) Соответствие между ТЗ на неких DSL и исходниками по хорошему надо поддерживать в автоматическом режиме. Что-то отдаленно напоминающее активную model-view-controller с тонкими контроллерами из оригинального Smalltalk. Может, есть подходящий софт для этого? Был, помнится, неплохой Borland CaliberRM, в котором требование можно было привязывать к исходному коду. Забавно, версию 2008-го года какие-то наглецы еще продают, за 221 тысячу рублей на одно одновременное подключение одним пользователем. lulz.

Источник

Йоги Берра

ТочностьВыборочно проверено

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

Лоуренс Питер «Йоги» Берра (родился 12 мая 1925) — американский бейсболист и менеджер бейсбольной команды.

Цитаты [ править ]

Рано быстро становится поздно.

В теории нет разницы между теорией и практикой. А на практике есть.

Можно многое заметить, всего лишь глядя.

You can observe a lot by watching.

Нелегкое это дело — предсказывать, особенно будущее.

Будущее теперь уже не то, что раньше.

The future ain’t what it used to be.

Если идешь сам не знаешь куда, будь осторожнее, иначе можно туда и не дойти.

You’ve got to be careful if you don’t know where you’re going because you might not get there.

Есть люди, которым ничего не объяснишь, если они еще этого не поняли.

Я не могу думать, когда я сосредоточиваюсь.

Мы совершаем слишком много неправильных ошибок.

We made too many wrong mistakes.

Если человек не хочет по утрам заниматься бегом, его ничто не может остановить.

If people don’t want to come to the ballpark how are you going to stop them?

В этот ресторан больше никто не ходит, потому что он всегда переполнен.

Nobody goes there anymore. It’s too crowded.

Не копируйте человека, если вы неспособны ему подражать.

If you can’t imitate him, don’t copy him.

Подъехав к развилке на дороге, следуйте по ней. — Берра сказал это, объясняя как доехать до его дома. На дороге есть развилка, и какой бы путь вы ни выбрали, вы приедете к его дому.

When you come to a fork in the road, take it.

Игра не закончена, пока она не закончена.

[Сколько времени?] Вы имеете ввиду сейчас? — Берра был пасажиром самолета и не был уверен в каком часовом поясе нахоится.

[What time is it?] You mean now?

На самом деле я не говорил ничего из того, что я говорил.

Источник

Можно ли прогнозировать цену ценных бумаг нейронной сетью?

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

Когда рассматривается задача прогнозирования временных рядов нейронной сетью у читателя (слушателя, зрителя, …) часто возникает идея о том, что можно же сетью прогнозировать и цену акций, обретя возможность узнать, когда стоит докупить, а когда продать. Временами даже встречаются работы, в которых описывается, как именно можно нейронной сетью прогнозировать этот самый курс акций. Примером здесь может быть работа[1], там авторы приводят даже некоторые результаты. А вот в книге Ф. Шолле “Глубокое обучение на Python”[2], имеется вполне недвусмысленное предупреждение о том, что не стоит пытаться пытаться использовать машинное обучение для предсказаний курсов ценных бумаг. Шолле объясняет это тем, что в случае рынка, данные о прошлом состоянии являются плохой основой для предсказания будущего состояния. В работе [3]авторы вообще приходят к выводу, что курс ценных бумаг это мартингал (в математическом смысле этого слова), и наилучшим прогнозом (с точки зрения величины ошибки прогноза) его будущего состояния является его текущее состояние.

Так можно ли нейронной сетью прогнозировать курс ценных бумаг? Попробуем ответить на вопрос с разных точек зрения.

Теория

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

Что такое акция? Акция это ценная бумага, которая удостоверяет право её держателя на получение части прибыли предприятия. Уже из одного этого следует, что цена акции должна быть связана с прибылью предприятия. Более того, цена связана не столько с фактической прибылью предприятия, сколько с ожидаемой прибылью, то есть цена выражает мнение рынка о том, какой будет эта прибыль. А мнение может быть ошибочным. Мы помним историю стартапа Theranos, который утверждал, что у них есть революционная технология анализа ДНК чуть ли не по одной капле крови, а потом оказалась, что точность анализа сопоставима с тычками пальцем в небо. Таким образом, цена акции зависит от субъективного мнения инвесторов о компании.

Посмотрим на рисунок ниже. На нём график изменения цены акций компании Maersk. Как видим, 2 апреля 2019 акция стоила 7718 DKK, а на следующий день — уже 7750. Почему? Причиной тому маленькая буква D внизу графика. 3 апреля выплачивались дивиденды, и, видимо, сумма была обещана хорошая, раз инвесторы начали скупать акции. То есть, к росту цен привело некоторое приближающееся событие.

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

Теперь посмотрим на ещё один график. Это курс акций нашего Яндекса в те дни, когда в сеть просочились слухи о том, что Сбербанк собирается его купить. Обычно, на таких слухах цена акций как раз резко взлетает (ну ещё бы, компания-покупатель будет выкупать акции с рынка и всем хочется, чтобы акции выкупили именно у него…), но в этот раз инвесторы, видимо, решили, что покупка частного Яндекса государственным Сбербанком не несёт ничего хорошего.

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

По мнению специалистов Отдела Небеснопальцевого Метода Познания НИИ Банальных Исследований, отсюда следует довольно простой вывод: цена акций зависит, в первую очередь, от мнения инвесторов о будущем компании, а не от её текущего состояния, и уж тем более не от текущей цены на акции как таковой. Поэтому прогнозировать будущую цену на основе текущей (или нескольких предыдущих) не имеет смысла.

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

Практика

Как известно, в теории теория и практика неразделимы, но на практике это не так. Попробуем что-нибудь спрогнозировать, и посмотрим, что получится.

Мы будем обучать нейронную сеть, которая по (n) ценам предскажет (n+1)-ю. При этом мы предполагаем, что время между двумя последовательными замерами одинаково. Для начала, нам потребуется набор данных, то есть те самые цены, брать данные мы будем с Yahoo Finance.

Для начала попробуем прогнозировать изменение цен по дням, то есть, каждому дню у нас будет соответствовать одна величина. Мы будем прогнозировать цену закрытия на основе нескольких цен закрытия за предыдущие дни, а в качестве подопытного будет выступать Maersk.

Как им пользоваться можно ознакомится тут. Теперь обратимся к бирже:

Подробно прочитать про функцию history и то, какие параметры она принимает, и какие константы поддерживаются для параметров period и interval можно тут.

Итак, запросим данные:

Теперь в переменной history у нас данные о ценах в виде pandas DataFrame, посмотрим на них подробнее:

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

Итак, Keras даёт нам TimeseriesGenerator, его и будем использовать для получения обучающих данных. Подробнее об этом генераторе — по ссылке. Проблема здесь в том, что мы хотим учитывать ещё и выплату дивидендов, так как, как мы обнаружили, что она влияет на цену. Напишем функцию, которая сгенерирует нам обучающую выборку. Аргументами этой функции будут набор данных и количество входных сигналов, нужное для получения одного прогноза. Мы не будет сейчас делить данные на пакеты, мы только расширим каждую строку признаком того, будут ли выплачиваться дивиденды. Мы воспользуемся классом TimeseriesGenerator чтобы получить один большой массив обучающих данных, сгенерированный с использованием скользящего окна.

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

Мы упомянули пакеты, так что стоит пояснить, что это вообще такое. Обучение нейронной сети выполняется градиентным методом, который требует вычисления градиента функции потерь (отсюда и название). Самым простым является метод градиентного спуска. Классический подход предполагает, что градиент функции потерь вычисляется для всей обучающей выборки. Но тут есть недостатки. Во-первых, это может быть весьма накладно с вычислительной точки зрения — обучающая выборка может быть очень большой. Во-вторых, замечено, что при обучающих выборках очень большого размера, величина градиента может оказаться очень большой, и могут начаться проблемы с тем, что такие числа просто не помещаются в их машинное представление. Второе, конечно, имеет смысл в самых крайних случаях. Знающие люди отмечают, что нам, на самом деле, не очень-то и нужно точное значение градиента целевой функции[4]. Нам нужна оценка того, в какую сторону смещаться, чтобы минимизировать функцию потерь. Поэтому мы можем оценить градиент на основе некоторого подмножества обучающих примеров, чтобы определить это направление движения. Конечно, нам всё же придётся обойти все примеры, но теперь мы знаем, что нам не обязательно обрабатывать их все сразу. Мы можем разделить обучающую выборку на части равного размера (то есть на пакеты, batch) и вычислять градиент для каждого пакета отдельно, корректируя веса нейронной сети только на основе такого, “частичного”, градиента. После того, как обработали все пакеты, можно считать, что завершили одну эпоху обучения. В процессе обучения эпох может быть несколько, их количество зависит от задачи и самого хода обучения. Те же знающие люди также отмечают, что примеры должны быть распределены по пакетам случайно[4], то есть если два примера в обучающей выборке расположены друг за другом, они не должны попасть в один пакет, или, во всяком случае, должны быть расположены в ином порядке и не друг за другом.

Итак, проверим нашу функцию и сгенерируем обучающие данные, исходя из того, что для получения прогноза достаточно 4-х значений.

Посмотрим на один пакет обучающих примеров.

Как видим, это вектор, последний элемент которого указывает на то, будут ли выплачены дивиденды в тот день, для которого выполняется прогнозирование.

Мы видим, что величина значений цен довольно высока. Действительно, цена закрытия изменяется в интервале \(<767.7, 12740.0>\) что говорит о том, что нужно нормализовать значения. Воспользуемся методом нормализации MinMax.

Мы нормализуем исходные данные, так что обучающую выборку нужно сгенерировать снова.

Посмотрим на нормализованные данные.

Пришло время, наконец, собрать сеть и обучить её. Итак, наша сеть будет иметь (N+1) вход и один выход. Входы соответствуют замерам цены акции, а также содержат признак того, что в целевой день выплачиваются дивиденды, а выход соответствует цене закрытия для целевого дня. Величину N, число значений, на основе которых прогнозируется результат, нам предстоит определить. Поэтому напишем функцию, которая будет генерировать нам сети с разным числом входов. Мы используем конструкцию n+1 чтобы добавить вход, отвечающий за дивиденды.

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

Ура, наконец-то создаём сеть:

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

Теперь обучим сети, меняя число входов от 2 до 10 и обучая в течения 20 эпох.

Дождавшись окончания процесса, получим краткую информацию о результатах. Для каждой сети получим её размер и значения ошибки обучения и тестирования на последней эпохе.

Как видим, значение ошибки при тестировании всегда несколько больше, чем при обучении. Это нормально и говорит о том, что незнакомые данные сеть обрабатывает несколько хуже, чем известные.

Построим график зависимости ошибки при тестировании в зависимости от количества входов.

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

Итак, из графика видно, для какого числа входов мы получили наименьшую ошибку. Результат может меняться в зависимости от того, сколько данных уже накопилось. То есть, чем больше времени пройдёт с момент написания этих строк, тем больше шансов, что результат поменяется.

Кстати, любопытное наблюдение: если запустить этот скрипт два раза подряд, то мы с высокой вероятностью получим разные результаты. То есть для разных запусков минимальную ошибку покажут разные сети. Так как сети отличаются только числом входов, то такая изменчивость результатов говорит о том, что результат прогноза мало зависит от количества входов. Это, в свою очередь, подтверждает изначальный тезис о том, что сетью не получится прогнозировать цену акций. Мы видим, что сеть учится минимизировать ошибку не используя звсе входы, вероятно, приходя к выводу, выход не зависит ото всех входов.

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

Нехилая ошибка, даже для того числа входов, где мы получаем наименьшую ошибку, фактическое значение погрешности велико. Я бы не стал вкладывать куда-то, если прогноз результата имеет такую ошибку. И другим бы не советовал.

Посмотрим на график самого предсказания. Красным здесь обозначено ожидаемое значение, а синим — предсказание.

в теории теория и практика неразделимы на практике это не так. Смотреть фото в теории теория и практика неразделимы на практике это не так. Смотреть картинку в теории теория и практика неразделимы на практике это не так. Картинка про в теории теория и практика неразделимы на практике это не так. Фото в теории теория и практика неразделимы на практике это не так

Вот тут можно посмотреть тот же график, но большего размера. Можно увеличить и посравнивать. Нетрудно увидеть, что линии совпадают нечасто.

Выводы

Мы получили большое значение ошибки для незнакомых данных. Это говорит о том, что наша сеть не справилась с задачей и не смогла предсказать цену закрытия для акций. Возможно, можно повысить точность результата, поменяв архитектуру сети или увеличив число эпох. Собрать больше данных вря д ли получится, так как мы и так использовали данные за всё время торгов, потому расширять диапазон некуда. Обучать сеть на данных от нескольких компаний, вероятно, не самая удачная идея, так ак курс акций разных компаний может изменяться по разным законам, и смешение их в один набор данных вряд ли приведёт к чему-то полезному.

Следует помнить, что наша нейронная сеть на самом деле не прогнозирует цену ценных бумаг как таковую. Вместо этого она пытается предположить, каким будет следующее значение временного ряда, на основе нескольких известных значений. Это связано с тем, что цена акций не кодирует никаким образом как она будет изменятся в следующий момент. То, что цена росла на протяжении какого-то времени не означает, что она не упадёт в следующий момент. На цену в гораздо большей мере влияют внешние события, которые нейронная сеть не прогнозирует, чем цена за предыдущее время.

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

Если посмотреть на график изменения цены с течением времени, то можно увидеть, что график похож на случайный. Возможно, это не так далеко от истины, если мы имеем только сами цены и не знаем о внешних событиях. То есть, для нейронной сети цена действительно может выглядеть как мартингал, то есть [почти] непрогнозируемый временной ряд. Так что здесь я согласен с Ф. Шолле по поводу того, что нейронной сетью курс акций лучше не прогнозировать.

Если уж очень хочется заработать не за счёт вдумчивого чтения финансовой отчётности, а за счёт математического анализа биржевых показателей, то стоит посмотреть на Quantitative Analysis. Говорят, работает.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *