Catboost Regression. Экстраполяция функций

Я новичок в ML, и у меня проблема с catboost. Итак, я хочу предсказать значение функции (например, cos | sin и т. Д.). Я перебрал все, но мой прогноз всегда прямой

Возможно ли это, и если да, то как я могу решить свои проблемы

Буду рад любому комментарию))

train_data = np.array(np.arange(1, 100, 0.5))
test_data = np.array(np.arange(100, 120, 0.5))

train_labels = np.array(list(map(lambda x : math.cos(x), np.arange(1, 100, 0.5))))

model = CatBoostRegressor(iterations=100, learning_rate=0.01, depth=12, verbose=False)
model.fit(train_data, train_labels)
preds = model.predict(test_data)

plt.plot(preds)
plt.show()

На этой картинке показано, чего я хочу:

введите описание изображения здесь


person Яков Гущин    schedule 06.01.2019    source источник
comment
Модели машинного обучения обычно не подходят для экстраполяции; см. ответ на Плохо ли глубокое обучение подгоняет простые нелинейные функции за рамки обучения?   -  person desertnaut    schedule 06.01.2019


Ответы (2)


Следует понимать, что машинное обучение - это не волшебство.

Первое машинное обучение не может чудесным образом все предсказать.

Во-вторых, вам нужно выбрать правильный алгоритм машинного обучения, потому что не существует лучшего алгоритма, который работал бы лучше всего все время. См .: https://en.wikipedia.org/wiki/No_free_lunch_theorem

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

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

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

Я бы отказался от этой проблемы и нашел бы проблему, более решаемую / подходящую для ML.

Что-то вроде прогноза цен на жилье было бы хорошо.

person Clem Wang    schedule 29.08.2020

Я скомпилировал ваш код и обнаружил, что вектор прогноза содержит одно и то же значение для всех записей [-0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229 -0.09229]

Я думаю, что ваша модель находится в состоянии сильного смещения (неадекватности). Попробуйте увеличить количество функций или используйте полиномиальные функции.

person Abhishek    schedule 06.01.2019
comment
Спасибо! Я увеличиваю число до 10000, но это не сработало. Я пробовал использовать полиномиальную функцию - результат тот же (одинаковые значения). Вы можете мне помочь с функциями. Насколько я понимаю, мне нужно несколько столбцов с разной степенью x, но функция sin - это бесконечный набор слагаемых. - person Яков Гущин; 07.01.2019
comment
Я нашел эту статью по вашему вопросу. Проверьте это: todatascience.com/ - person Abhishek; 07.01.2019