Привет всем!
Надеюсь, вы все в безопасности.
В продолжение моего предыдущего блога конкурса Истории разработчиков MSP, организованного сообществом партнеров Microsoft для студентов, исключительно для региона Индия , этот блог посвящен теме Модельное обучение с использованием машинного обучения в записных книжках Azure.
Итак, давайте начнем с того, как мы обычно обучаем модель с помощью Python:
1. Сначала загрузите набор данных. Я использую самый популярный набор данных, который используют новички: Набор данных Iris.
from sklearn.datasets import load_iris iris = load_iris()
2. Затем мы загружаем данные и желаемые результаты. Например, детали цветка - это данные, а название цветка, которое он даст, - это цель.
X = iris.data y = iris.target
3. Теперь разделите данные на две части: обучающую и тестовую. Обучение используется для обучения нашей модели, а тест используется для проверки правильности обучения модели.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
4. Теперь нам нужно импортировать модель и обучить ее.
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train)
5. Давайте спрогнозируем некоторые данные, используя нашу модель, используя тестовые данные, и сравним, насколько точны фактические результаты по сравнению с прогнозируемыми.
y_pred = knn.predict(X_test) from sklearn import metrics print(“kNN model accuracy:”, metrics.accuracy_score(y_test, y_pred))
Ого! точность 0,98 - это здорово.
Теперь я собираюсь применить эти знания о модельном тренинге в моем предыдущем проекте, основанном на случаях Covid-19 в Италии. Я бы посоветовал вам предварительно загрузить набор данных и также переименовать столбцы, используя шаги, упомянутые в моем предыдущем блоге.
- Итак, сначала импортируем модель. Я использую здесь модель ARIMA, так как мои данные, которые я должен тренировать, меняются со временем, а модель ARIMA хорошо подходит для данных типа временные ряды.
from statsmodels.tsa.arima_model import ARIMA
2. Загрузите фрейм данных со столбцом, прогноз которого мы хотим сделать. Я хочу предсказать общее количество положительных случаев коронавируса в ближайшее время. Так что загрузите фрейм данных с этим столбцом.
df=df[[‘Total amount of positive cases’]]
3. Теперь обучите модель и проверьте сводку.
model=ARIMA(df,order=(1,1,1)) model_fit=model.fit(disp=0) print(model_fit.summary())
4. Что !! не все ли вы думаете, что ошибка (std err) слишком велика? Я изучил эту проблему подробнее и обнаружил, что, возможно, мой набор данных временных рядов не является стационарным. Поэтому я провел несколько базовых тестов, чтобы проверить, являются ли мои данные стационарными или нет.
from numpy import log x=df.values split=round(len(x)/2) x1,x2=x[0:split],x[split:] mean1,mean2=x1.mean(),x2.mean() var1,var2=x1.var(),x2.var() print(“mean1=%f, mean2=%f”%(mean1,mean2)) print(“variance1=%f,variance2=%f”%(var1,var2))
5. разница в отклонениях явно указывает на то, что мои данные вообще не являются стационарными. Я также построил гистограмму для проверки, и результаты показали очевидные нестационарные данные.
df.hist()
СОВЕТ: Вы также можете выполнить тест ADF, чтобы проверить, является ли временной ряд стационарным или нет.
6. Теперь, зная, что мои данные не являются стационарными, мне нужно преобразовать их в стационарные ряды. Логарифмическое преобразование можно использовать для сглаживания экспоненциального изменения обратно к линейной зависимости.
dfl=log(df) dfl.hist() dfl.plot()
x=dfl.values #log values split=round(len(x)/2) x1,x2=x[0:split],x[split:] mean1,mean2=x1.mean(),x2.mean() var1,var2=x1.var(),x2.var() print(“mean1=%f, mean2=%f”%(mean1,mean2)) print(“variance1=%f,variance2=%f”%(var1,var2))
7. Ооо !! даже журнал не мог преобразовать его в стационарный ряд. Давайте реализуем самый проверенный метод преобразования нестационарных рядов в стационарные, т. Е. разностные. Вы можете реализовать явно, определив функцию, или вы также можете использовать встроенные методы.
(I) Ясно:
from pandas import Series def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] — dataset[i — interval] diff.append(value) return Series(diff) diff = difference(df.values) from matplotlib import pyplot pyplot.plot(diff) pyplot.show()
(ii) Встроенный метод:
diff = df.diff() pyplot.plot(diff) pyplot.show()
8. Ооо! Мне все еще не удается преобразовать нестационарные данные в стационарные данные с помощью разности. Хорошо, я собираюсь провести еще пару раз дифференцирования с помощью встроенного метода. Я проводил дифференцирование еще 3 раза.
9. Разрежьте переменную diff до 4 раз, потому что при каждом различии первое значение преобразуется в NaN.
diff=diff[4:]
10. Давайте обучим нашу модель еще раз и посмотрим, что произойдет на этот раз ...
model=ARIMA(diff,order=(1,1,1)) model_fit=model.fit(disp=0) print(model_fit.summary())
Тем не менее, в результатах наблюдается высокая погрешность !!
Что означают эти ошибки?
Что COVID невозможно предсказать?
Что все прогнозы, которые вы слышите, ложны?
Что нет уверенности в том, что этот вирус закончится?
Нет уверенности в его пиковой точке?
Нет уверенности в отношении периода блокировки ?
Я собираюсь оставить вас с этими вопросами до моего следующего блога. Тем временем мы оба постараемся найти ответ на эти вопросы.
А пока оставайтесь дома в безопасности.