Нельзя избежать настройки гиперпараметров при работе с моделями машинного обучения. Мы пробуем разные наборы значений для гиперпараметров, связанных с моделью. Раньше я отслеживал все эксперименты по настройке гиперпараметров с помощью листа Excel. Однако теперь я использую MLFLOW, чтобы отслеживать это, и позвольте мне показать вам, как я это делаю.
В этом блоге мы будем классифицировать очень известный набор данных радужной оболочки, используя k-ближайших соседей (k-NN). Мы настроим гиперпараметр k в k-NN и будем отслеживать все эксперименты и модели с помощью MLFLOW.
Следуя своей ленивой натуре, я буду использовать часть кода для классификации набора данных радужной оболочки из
https://deepnote.com/@ndungu/Implementing-KNN-Algorithm-on-the-Iris-Dataset-58Fkk1AMQki-VJOJ3mA_Fg
Я использую google colab для экспериментов. Давайте сначала установим mlflow:
!pip установить млфлов
Давайте импортируем все библиотеки
из sklearn импортировать наборы данных из sklearn.model_selection импортировать train_test_split из sklearn.preprocessing импортировать нормализатор из sklearn.metrics импортировать accuracy_score из sklearn.neighbors импортировать KNeighborsClassifier импортировать pandas как pd импортировать numpy как np
импортировать млфлов
Набор данных выглядит следующим образом:
радужная оболочка = datasets.load_iris()
iris_df = pd.DataFrame(data= np.c_[iris[‘data’], iris[‘target’]], columns= iris[‘feature_names’] + [‘target’])
iris_df.head(5)
Разделение независимых и зависимых переменных.
x= iris_df.iloc[:, :-1] y= iris_df.iloc[:, -1]
Разделение данных на набор поездов и набор тестов.
x_train, x_test, y_train, y_test= train_test_split(x, y,test_size= 0,2,shuffle= True, #перетасуйте данные, чтобы избежать смещения. random_state= 0)
x_train= np.asarray(x_train) y_train= np.asarray(y_train) x_test= np.asarray(x_test) y_test= np.asarray(y_test)
При k = 2 простой классификатор k-NN будет выглядеть так:
knn=KNeighborsClassifier(2) knn.fit(x_train, y_train) y_pred_sklearn= knn.predict(x_test)
печать (y_pred_sklearn)
Значение в y_pred_sklearn:
точность_оценка(y_test, y_pred_sklearn)
Теперь, что если я хочу попробовать разные значения k и посмотреть, как изменится показатель точности, и на основе этого показателя точности я бы выбрал лучший классификатор. MLFLOW спешит на помощь.
mlflow.sklearn.autolog()
для k в диапазоне (2,10):
с mlflow.start_run():
knn=KNeighborsClassifier(k)
knn.fit(x_train, y_train)
y_pred_sklearn= knn.predict(x_test)
mlflow.log_metric("точность", accuracy_score(y_test, y_pred_sklearn))
После запуска этого блока кода будет создана папка с именем «mlruns».
Теперь каждая вложенная папка обозначает одно значение гиперпараметра k. Вот почему есть 8 подпапок. Давайте посмотрим на первую подпапку:
Файл model.pkl — это файл рассола модели с этим конкретным значением гиперпараметров. Папка метрик состоит из некоторых метрик по умолчанию, а также метрики, указанной в логике кода. В нашем случае это была «точность». Папка params состоит из всех гиперпараметров и их значений, которые использовались для построения модели в этой подпапке.
На основе оценки точности мы выбираем модель в этой конкретной подпапке для развертывания/для вывода.
Обычно я использую mlflow с блоками данных, так как это немного упрощает мою жизнь: p