Введение в машинное обучение - страница 16
Загрузить набор данных можно, используя keras. Предварительно потребуется загрузить необходимые библиотеки:
# TensorFlow и tf.keras
import tensorflow as tf
from tensorflow import keras
# Вспомогательные библиотеки
import numpy as np
import matplotlib.pyplot as plt
Теперь можно загрузить набор данных и посмотреть одно из изображений:
fashion_mnist = keras.datasets.fashion_mnist
(X_train1, y_train),(X_test1,y_test)= fashion_mnist.load_data()
plt.figure()
plt.imshow(X_train1[10])
plt.colorbar()
plt.grid(False)
plt.show()
Как видно, диапазон изменения яркости пикселя – от 0 до 255. Если подать такие значения на вход нейронной сети, качественные результаты классификации существенно упадут. Поэтому все значения нужно нормировать так, чтобы на вход сети поступили значения в диапазоне от 0 до 1, просто разделив каждое значение на 255:
X_train1=X_train1/255.0
X_test1=X_test1/255.0
Следующее, что нам необходимо сделать в процессе предобработки, – это преобразовать двумерные массивы изображений 28 x 28 в одномерные векторы. Каждый такой вектор станет набором входных параметров размерностью 784:
X_train=np.reshape(X_train1,(X_train1.shape[0],X_train1.shape[1]*X_train1.shape[2]))
X_test=np.reshape(X_test1,(X_test1.shape[0],X_test1.shape[1]*X_test1.shape[2]))
В результате матрица X_train размерностью (60 000, 28, 28) будет преобразована в матрицу размером (60 000, 784), которую можно подать на вход нейронной сети для тренировки.
>from sklearn.neural_network import MLPClassifier
>clf = MLPClassifier(hidden_layer_sizes = [15, 15,],
> alpha = 0.01,random_state = 0,
> solver='adam').fit(X_train, y_train)
Обучение нейронной сети может занять несколько минут. Затем можно оценить качественные показатели классификатора командами:
>predictions=clf.predict(X_test)
>print('Accuracy of NN classifier on training set: {:.2f}'
> .format(clf.score(X_train, y_train)))
>print('Accuracy of NN classifier on test set: {:.2f}'
> .format(clf.score(X_test, y_test)))
>print(classification_report(y_test,predictions))
>matrix = confusion_matrix(y_test, predictions)
>print('Confusion matrix on test set\n',matrix)
Значение accuracy может быть примерно следующим:
Accuracy of NN classifier on training set: 0.89
Accuracy of NN classifier on test set: 0.86
Изменяя количество нейронов в слоях сети и параметр регуляризации alpha (например, hidden_layer_sizes = [75, 75], alpha = 0.015), можно несколько улучшить результат:
Accuracy of NN classifier on training set: 0.91
Accuracy of NN classifier on test set: 0.88
Примечание. Программу данного раздела MLF_MLP_Fashion_MNIST_001.ipynb можно получить по ссылке – https://www.dropbox.com/s/ryk05tyxwlhz0m6/MLF_MLP_Fashion_MNIST_001.html?dl=0
2.9. Алгоритм k ближайших соседей (k-Nearest Neighbor – k-NN)
Алгоритм [[58], [59]] основан на подсчете количества объектов каждого класса в сфере (гиперсфере) с центром в распознаваемом (классифицируемом) объекте. Классифицируемый объект относят к тому классу, объектов у которого больше всего в этой сфере. В данном методе предполагается, что веса выбраны единичными для всех объектов.
Если веса не одинаковы, то вместо подсчета количества объектов можно суммировать их веса. Таким образом, если в сфере вокруг распознаваемого объекта 10 эталонных объектов класса А весом 2 и 15 ошибочных/пограничных объектов класса Б весом 1, то классифицируемый объект будет отнесен к классу А.