Вопрос или проблема
Я работал над проектом, связанным с COVID-19. Вот вопрос:
- N = вектор новых ежедневно выявленных случаев заражения
- D = вектор ежедневных смертей
- E[D] = оценка ежедневных смертей
N — это n-мерный вектор, n составляет около 60. E[D] — это другой n-мерный вектор. При определенных предположениях каждое значение E[D] можно рассчитать как линейную комбинацию значений N.
Мы хотим найти вектор N так, чтобы E[D], полученное из N, имело наименьшую среднеквадратичную ошибку по сравнению с фактическими данными D. Я думаю, что здесь нужен алгоритм градиентного спуска. Однако я не очень знаком с градиентным спуском.
Это, кажется, базовая проблема в области науки о данных, но я немного растерян сейчас. У кого-нибудь есть идеи, какой алгоритм мне изучить?
Если входные данные одинаковы и вы ожидаете несколько выходов, я бы рекомендовал вам обратить внимание на модели с несколькими выходами, которые могут быть двух типов:
- нативные алгоритмы с несколькими выходами
- несколько регрессоров с одним выходом, объединенных вместе. Модель многоуровневой регрессии из библиотеки Sklearn это делает.
Можно попробовать базовый линейный или полиномиальный регрессор. В SKLEARN есть готовые API для этого. Регрессию также можно реализовать с помощью SVM, решающих деревьев, случайного леса и т. д., или использовать более сложные случаи с глубокими нейронными сетями.
Эти алгоритмы внутренне будут использовать градиентный спуск, скрывая математическую сложность от вас.
Ответ или решение
Для решения задачи минимизации среднеквадратичной ошибки (MSE) в контексте анализа данных о COVID-19 необходимо использовать линейные модели и алгоритмы оптимизации, такие как градиентный спуск. Давайте более подробно рассмотрим, как можно найти вектор ( N ), который минимизирует MSE между оценочной вектором ( E[D] ) и фактическими данными о смерти ( D ).
1. Определение задачи
У вас имеется два вектора:
- ( N ) — вектор ежедневных новых случаев заражения (размерность ( n ), примерно 60).
- ( D ) — вектор ежедневных смертей, который вы хотите спрогнозировать с помощью линейной комбинации вектора ( N ).
Ожидается, что каждый элемент ( E[D] ) можно выразить через линейные комбинации элементов вектора ( N ):
[
E[D] = W^T N
]
где ( W ) — вектор весов, который необходимо определить.
2. Минимизация средней квадратичной ошибки
Для задачи минимизации MSE можно использовать следующую формулу:
[
\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (E[D_i] – D_i)^2
]
Чтобы найти оптимальные веса ( W ), мы можем использовать методы оптимизации, такие как градиентный спуск.
3. Применение градиентного спуска
Градиентный спуск — это итеративный метод оптимизации, используемый для нахождения местного минимума функции. Основная идея заключается в том, чтобы обновлять веса ( W ) в направлении, противоположном градиенту функции потерь.
Формальный алгоритм градиентного спуска включает следующие шаги:
-
Инициализация:
- Инициализируйте веса ( W ) случайными значениями.
- Задайте скорость обучения ( \alpha ).
-
Обновление весов:
На каждом шаге градиентного спуска:- Вычислите предсказания ( E[D] = W^T N ).
- Вычислите градиент ошибки:
[
\text{gradient} = \frac{2}{n} (E[D] – D) N
] - Обновите веса:
[
W := W – \alpha \cdot \text{gradient}
]
-
Повторяйте шаги 2 до достижения сходимости или завершения заданного количества итераций.
4. Альтернативные методы
Если вы не хотите углубляться в реализацию градиентного спуска, можно использовать существующие библиотеки для решения регрессионных задач. Например, библиотека Scikit-learn предоставляет простые и удобные методы для реализации линейной регрессии:
-
Линейная регрессия:
from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(N.reshape(-1, 1), D) predictions = model.predict(N.reshape(-1, 1))
-
Полиномиальная регрессия:
Если зависимость между ( N ) и ( D ) является нелинейной, вы можете использовать полиномиальную регрессию с помощьюPolynomialFeatures
:from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import make_pipeline model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression()) model.fit(N.reshape(-1, 1), D) predictions = model.predict(N.reshape(-1, 1))
Заключение
Ваша задача по прогнозированию может быть решена через линейные методы или более сложные алгоритмы машинного обучения, которые используют внутренние механизмы оптимизации, в том числе градиентный спуск. Рекомендуется начать с простых моделей, таких как линейная регрессия, чтобы обеспечить базовое понимание задачи, перед тем как переходить к более сложным методам.
Удачи в вашем проекте! Если вам потребуется более детальная помощь или информация по конкретным методам, не стесняйтесь обращаться.