Беда ещё и в том, что нормализация - вооще гиблое дело!
Поясню. Есть некоторые данные А, Б, В...
Они разные в плане значимости и прочее. Все (в гугле) пишут, что нормализовать надо не по строкам, а по столбцам (А-А-А, Б-Б-Б, В-В-В). Это логически понятно.
Но при появлении новых данных для "предсказания" КАК их нормализовать, если это только ОДНА строка? И любой член в этой строке может выходить за рамки нормализации на тренировочных и тестовых данных?
А нормализация по строкам никакого эффекта не даёт!
Собственно, уже после проверки этих ньюансов, у меня и родился этот "крик души" )))
при нормализации сохраняются коффициенты. Чтобы не было выхода за диапазон, надо брать большой кусок истории и нормализовать, потом применять эти коэфф. к новым данным
на ненормализованных данных сетка не обучится, или плохо обучится. Такие у них особенности
при нормализации сохраняются коффициенты. Чтобы не было выхода за диапазон, надо брать большой кусок истории и нормализовать, потом применять эти коэфф. к новым данным
на ненормализованных данных сетка не обучится, или плохо обучится. Такие у них особенности
Всё логично и понятно, но! Сетка то обучается! К тому же есть информация, что при использовании ненормализованных данных обучение проходит сложнее, но это не критично.
А как не выскочить за диапазоны? К примеру, есть цена. Есть диапазон цены на обучающих и тестовых данных - возьмём 123-324. А вот сегодня цена выросла до 421. Как она попадёт в этот самый диапазон?
Но мы отошли от сути вопроса - почему, при нормальном обучении и тестировании предсказание вооще ни о чём?
[3.00000e+007.00000e+001.14656e+001.14758e+001.14656e+001.14758e+003.00000e+007.00000e+001.27800e+031.27800e+033.00000e+007.00000e+001.14758e+001.14857e+001.14758e+001.14857e+003.00000e+008.00000e+002.93000e+026.20000e+023.00000e+008.00000e+001.14857e+001.14960e+001.14821e+001.14960e+003.00000e+008.00000e+004.78000e+027.23000e+023.00000e+008.00000e+001.14960e+001.14966e+001.14860e+001.14860e+003.00000e+008.00000e+002.32100e+032.41100e+03] len = 40
[1. 0.] len = 2
А дальше трындец...
if num_check_rows > r or num_check_rows == 0:
num_check_rows = r
model = tf.keras.models.Sequential()
model = tf.keras.models.load_model(flname)
model.summary()
for i in range(num_check_rows):
b = model.predict(test_data[i])
a = b[0]
x = a[0]
y = a[1]
x = format(x, '.5f')
y = format(y, '.5f')
print(f'ожидалось {test_verification[i]} >>> получили [{x} {y}]')
материться
Model: "sequential_16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 20) 820
_________________________________________________________________
dropout (Dropout) (None, 20) 0
_________________________________________________________________
dense_1 (Dense) (None, 10) 210
_________________________________________________________________
dense_2 (Dense) (None, 2) 22
=================================================================
Total params: 1,052
Trainable params: 1,052
Non-trainable params: 0
_________________________________________________________________
Traceback (most recent call last):
File "M:/PythonProgs/PycharmProjects/NNets/ТестерНС.py", line 79, in <module>
b = model.predict(test_data[i])
.....
ValueError: Error when checking input: expected dense_input to have shape (40,) but got array with shape (1,)
Покопавшись в инете, и посмотрев статью, на основе которой я писал свой код, я пришёл к неутешительному выводу, что каждый автор любой статьи "для начинающих" обязательно забудет сказать о чём-то важном...
Вот и тут - оказалось, что при обучении сети используется StandardScaler. А в статье ни гу-гу про то что это и нафига нужно.
Более того, StandardScaler - это стандартизация. А как я смогу провернуть такую же стандартизацию для единичного входного вектора - тем более ни слова.
Ещё хуже, что "стандартизация" проводится по колонкам из датасета! Не, ну для просто статистики - это нормально. А для прогнозов - это "***полная"! Это что, мне, при появлении новых данных нужно по-новой обучать сеть, только для того, что бы новые данные попали в диапазон "стандартизации"???
Бред!
Пока эта "новая сеть" обучится ситуация уже в корне может поменяться. Ну и наХфиг это нужно?
Вот вам и Питон с кучей "заточенных" библиотек....
Буду весьма признателен, если меня переубедят.
П.С. просто хочется верить, что потратил своё время на Питон не зря.
Покопавшись в инете, и посмотрев статью, на основе которой я писал свой код, я пришёл к неутешительному выводу, что каждый автор любой статьи "для начинающих" обязательно забудет сказать о чём-то важном...
Вот и тут - оказалось, что при обучении сети используется StandardScaler. А в статье ни гу-гу про то что это и нафига нужно.
Более того, StandardScaler - это стандартизация. А как я смогу провернуть такую же стандартизацию для единичного входного вектора - тем более ни слова.
Ещё хуже, что "стандартизация" проводится по колонкам из датасета! Не, ну для просто статистики - это нормально. А для прогнозов - это "***полная"! Это что, мне, при появлении новых данных нужно по-новой обучать сеть, только для того, что бы новые данные попали в диапазон "стандартизации"???
Бред!
Пока эта "новая сеть" обучится ситуация уже в корне может поменяться. Ну и наХфиг это нужно?
Вот вам и Питон с кучей "заточенных" библиотек....
Буду весьма признателен, если меня переубедят.
П.С. просто хочется верить, что потратил своё время на Питон не зря.
Может потому что, это только начало.
Но я не давно заинтересовался возможностями питона для mt. А о том, можно ли так сделать, никто не ответил. Добавил к этому что, в mql4 не будет работать. Решил не тратить время( возможно через какое то время ситуация изменится в лучшую сторону.
Поднабравшись ещё маленько знаний из того же гугла, пришёл к выводам:
Данные нужно "балансировать". К примеру, если из 1000 входных данных сигналы появляются только на 100, то нужно, как минимум, 1000 - ((1000 - 100) /3) = 700 "пустых" данных (не образующих сигналы) удалить.
Оставшееся желательно "нормализовать". Привести в диапазон 0-1. Но тут возникает очевидная трудность выбора "диапазона" нормализации. Что считать минимумом, а что максимумом? Я, пока, не знаю. Нормализую каждый входной массив только по его диапазону...
Выполнив эти два условия, получил заметное снижение обученности сети. К тому же обнаружил, что
Некоторые функции потерь, отброшенные ранее, работают лучше.
Результаты с меньшим количеством скрытых слоёв стали доминировать.
Осталось проверить количество эпох обучения.
Плюс к этому возник ещё вопрос: каким должен быть ответ сети?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Правильно - не правильно подготовлены....
Где об этом почитать? Я готовлю данные для НС по своему представлению, что важно, что нет.
Одно для меня загадка: однотипные данные нужно собирать "в кучку" или добавлять их по мере поступления?
С какой стороны собирать данные: от более "старых" или от "новых"?
Правильно - не правильно подготовлены....
Где об этом почитать? Я готовлю данные для НС по своему представлению, что важно, что нет.
Одно для меня загадка: однотипные данные нужно собирать "в кучку" или добавлять их по мере поступления?
С какой стороны собирать данные: от более "старых" или от "новых"?
в теме МО спросите, кто-нибудь ответит. Это тема про коннектор
Беда ещё и в том, что нормализация - вооще гиблое дело!
Поясню. Есть некоторые данные А, Б, В...
Они разные в плане значимости и прочее. Все (в гугле) пишут, что нормализовать надо не по строкам, а по столбцам (А-А-А, Б-Б-Б, В-В-В). Это логически понятно.
Но при появлении новых данных для "предсказания" КАК их нормализовать, если это только ОДНА строка? И любой член в этой строке может выходить за рамки нормализации на тренировочных и тестовых данных?
А нормализация по строкам никакого эффекта не даёт!
Собственно, уже после проверки этих ньюансов, у меня и родился этот "крик души" )))
при нормализации сохраняются коффициенты. Чтобы не было выхода за диапазон, надо брать большой кусок истории и нормализовать, потом применять эти коэфф. к новым данным
на ненормализованных данных сетка не обучится, или плохо обучится. Такие у них особенностипри нормализации сохраняются коффициенты. Чтобы не было выхода за диапазон, надо брать большой кусок истории и нормализовать, потом применять эти коэфф. к новым данным
на ненормализованных данных сетка не обучится, или плохо обучится. Такие у них особенностиВсё логично и понятно, но! Сетка то обучается! К тому же есть информация, что при использовании ненормализованных данных обучение проходит сложнее, но это не критично.
А как не выскочить за диапазоны? К примеру, есть цена. Есть диапазон цены на обучающих и тестовых данных - возьмём 123-324. А вот сегодня цена выросла до 421. Как она попадёт в этот самый диапазон?
Но мы отошли от сути вопроса - почему, при нормальном обучении и тестировании предсказание вооще ни о чём?
Уважаемые, у меня опять лыжи не едут... Прошу помощи.
Решил я набросать маленький тестер для проверки предсказания обученной сети.
Здесь всё нормально
А дальше трындец...
материться
Что не так?
Покопавшись в инете, и посмотрев статью, на основе которой я писал свой код, я пришёл к неутешительному выводу, что каждый автор любой статьи "для начинающих" обязательно забудет сказать о чём-то важном...
Вот и тут - оказалось, что при обучении сети используется StandardScaler. А в статье ни гу-гу про то что это и нафига нужно.
Более того, StandardScaler - это стандартизация. А как я смогу провернуть такую же стандартизацию для единичного входного вектора - тем более ни слова.
Ещё хуже, что "стандартизация" проводится по колонкам из датасета! Не, ну для просто статистики - это нормально. А для прогнозов - это "***полная"! Это что, мне, при появлении новых данных нужно по-новой обучать сеть, только для того, что бы новые данные попали в диапазон "стандартизации"???
Бред!
Пока эта "новая сеть" обучится ситуация уже в корне может поменяться. Ну и наХфиг это нужно?
Вот вам и Питон с кучей "заточенных" библиотек....
Буду весьма признателен, если меня переубедят.
П.С. просто хочется верить, что потратил своё время на Питон не зря.
Покопавшись в инете, и посмотрев статью, на основе которой я писал свой код, я пришёл к неутешительному выводу, что каждый автор любой статьи "для начинающих" обязательно забудет сказать о чём-то важном...
Вот и тут - оказалось, что при обучении сети используется StandardScaler. А в статье ни гу-гу про то что это и нафига нужно.
Более того, StandardScaler - это стандартизация. А как я смогу провернуть такую же стандартизацию для единичного входного вектора - тем более ни слова.
Ещё хуже, что "стандартизация" проводится по колонкам из датасета! Не, ну для просто статистики - это нормально. А для прогнозов - это "***полная"! Это что, мне, при появлении новых данных нужно по-новой обучать сеть, только для того, что бы новые данные попали в диапазон "стандартизации"???
Бред!
Пока эта "новая сеть" обучится ситуация уже в корне может поменяться. Ну и наХфиг это нужно?
Вот вам и Питон с кучей "заточенных" библиотек....
Буду весьма признателен, если меня переубедят.
П.С. просто хочется верить, что потратил своё время на Питон не зря.
С горем пополам разобрался. )))
Но теперь возник другой вопрос (ради которого всё это и затеял):
При обучении сети получил такие результаты
Другими словами - результат барский!
Запустил свой тестер. Получил вот такой результат
Ну и скажите, в каком именно месте видна обученность сети на 98% правильных результатов????
Hello, reading a few pages from the discussion didn't found anything concrete about the following question :
- Is there anything currently working like MetaTraderR or MetaTrader5 packages for MT and R integration ?
Cheers
Уж извините, продолжу свою эпопею... )))
Поднабравшись ещё маленько знаний из того же гугла, пришёл к выводам:
Выполнив эти два условия, получил заметное снижение обученности сети. К тому же обнаружил, что
Плюс к этому возник ещё вопрос: каким должен быть ответ сети?