Создание классификатора чисел с использованием контролируемых методов обучения
Машинное обучение (ML) произвело революцию в области компьютерных наук и используется во множестве приложений, от систем персонализированных рекомендаций до автономных транспортных средств. Для тех, кто интересуется ML, создание классификатора чисел может стать отличной отправной точкой. В этой статье представлен общий обзор того, как подходить к такому проекту с использованием контролируемых методов обучения.
Понимание проблемы
Задача классификатора чисел состоит в том, чтобы правильно идентифицировать рукописные цифры. Для этой цели часто используется база данных MNIST (модифицированный национальный институт стандартов и технологий). Этот набор данных содержит 70 000 изображений рукописных цифр в градациях серого, каждое из которых имеет размер 28x28 пикселей.
Проектный подход
Подход к этому проекту будет основан на обучении с учителем, типе машинного обучения, при котором модель обучается на размеченном наборе данных. В случае набора данных MNIST метки представляют собой фактические цифры, которые представляют изображения (0–9).
Подготовка данных
Перед обучением модели машинного обучения необходимо подготовить данные. Это часто включает в себя несколько шагов, включая разделение набора данных на обучающий набор и набор для тестирования. Обучающий набор используется для обучения модели, а тестовый набор используется для оценки ее производительности.
Кроме того, важно нормализовать данные изображения. Данные изображения обычно состоят из интенсивности пикселей в диапазоне от 0 (черный) до 255 (белый). Масштабируя эти значения в диапазоне от 0 до 1, модели легче учиться на данных.
# Import necessary libraries from sklearn.model_selection import train_test_split from keras.datasets import mnist import numpy as np # Load dataset (X_train, y_train), (X_test, y_test) = mnist.load_data() # Normalize pixel values to be between 0 and 1 X_train, X_test = X_train / 255.0, X_test / 255.0 # Reshape input data from (28, 28) to (28, 28, 1) w, h = 28, 28 X_train = X_train.reshape(X_train.shape[0], w, h, 1) X_test = X_test.reshape(X_test.shape[0], w, h, 1)
Выбор модели
Выбор правильной модели для задачи имеет решающее значение. Для классификатора чисел распространенным выбором является машина опорных векторов (SVM), тип модели машинного обучения, который часто используется для задач классификации. Однако другие модели, такие как сверточные нейронные сети (CNN), также могут быть эффективными, особенно при работе с данными изображений.
# Import necessary libraries from keras.models import Sequential from keras.layers import Dense, Conv2D, Flatten # Create a sequential model model = Sequential() # Add layers model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=(28,28,1))) model.add(Conv2D(32, kernel_size=3, activation='relu')) model.add(Flatten()) model.add(Dense(10, activation='softmax')) # Output layer
Обучение модели
После выбора модели следующим шагом будет ее обучение с использованием обучающих данных. Это включает в себя ввод данных в модель и предоставление ей возможности настроить свои внутренние параметры, чтобы они лучше соответствовали данным. Это делается с помощью процесса, известного как градиентный спуск, когда модель постепенно корректирует свои параметры, чтобы минимизировать разницу между ее прогнозами и фактическими метками.
# Compile the model model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Train the model model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=3)
Оценка модели
После обучения модели важно оценить ее производительность. Это делается с помощью тестового набора. Прогнозы модели в этом наборе сравниваются с фактическими метками для вычисления различных показателей производительности. Одной из наиболее распространенных метрик для задач классификации является точность, которая измеряет долю правильных прогнозов. Однако другие показатели, такие как точность, полнота и оценка F1, также могут иметь значение, особенно в случаях, когда классы несбалансированы.
# Evaluate the model test_loss, test_acc = model.evaluate(X_test, y_test) print('Test accuracy:', test_acc)
Настройка гиперпараметров
Даже после обучения модели обычно есть возможности для улучшения. Настраивая гиперпараметры модели (параметры, которые не извлекаются из данных), часто можно повысить ее производительность. Поиск по сетке и случайный поиск являются распространенными методами настройки гиперпараметров.
# Import necessary libraries from keras.wrappers.scikit_learn import KerasClassifier from sklearn.model_selection import GridSearchCV # Function to create model for KerasClassifier def create_model(): model = Sequential() model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=(28,28,1))) model.add(Conv2D(32, kernel_size=3, activation='relu')) model.add(Flatten()) model.add(Dense(10, activation='softmax')) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model # Create the KerasClassifier model = KerasClassifier(build_fn=create_model, verbose=0) # Define the grid search parameters batch_size = [10, 20, 40, 60, 80, 100] epochs = [10, 50, 100] param_grid = dict(batch_size=batch_size, epochs=epochs) # Conduct Grid Search grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1) grid_result = grid.fit(X_train, y_train) # Print Results print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
Заключение
Создание классификатора чисел представляет собой всестороннее введение в рабочий процесс проекта машинного обучения, охватывающее ключевые аспекты от подготовки данных и выбора модели до обучения и оценки модели. Понимая и применяя эти концепции, можно заложить прочную основу для более сложных проектов машинного обучения.
Вот копия кода, с которым вы можете поиграть самостоятельно; https://colab.research.google.com/drive/1CkHY3XBmlZ6_TDF60oJxEzskDHDBbbNa?usp=sharing