Нельзя избежать настройки гиперпараметров при работе с моделями машинного обучения. Мы пробуем разные наборы значений для гиперпараметров, связанных с моделью. Раньше я отслеживал все эксперименты по настройке гиперпараметров с помощью листа 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