Введение в машинное обучение - страница 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, то классифицируемый объект будет отнесен к классу А.