Сначала я скажу, что не являюсь экспертом в области нейронных сетей, на самом деле я только начал свой путь не так давно, изучая и внедряя нейронные сети с некоторыми тестовыми данными. Я скажу, что сначала это может быть ошеломляющим, но как только общая предпосылка о нейронной сети начинает проникать в ваш мозг, на самом деле все становится довольно просто.

Сегодня основная библиотека, которую мы будем использовать, называется MLPClassifer. Эта библиотека НЕ имеет обратного распространения, поэтому ее следует использовать для небольших или средних наборов данных с двоичными выходами или несколькими выходными узлами. Мы также будем реализовывать больше библиотек в качестве вспомогательных инструментов.
Вместо того, чтобы реализовывать все библиотеки в заголовке, в этом посте я буду импортировать их по мере их появления.
Мы будем использовать набор данных под названием «упражнения» и построим нейронную сеть, чтобы предсказать, в какое время упражняется человек, основываясь на его диете и его пульсе.
import seaborn as sns
#import data
data = sns.load_dataset('exercise')
data.head()
Глядя на данные, мы, очевидно, видим, что столбцы «вид» и «диета» не являются целыми значениями, что делает обучение модели практически невозможным.
Вот тут-то и пригодится LabelEncoder ()!
from sklearn.preprocessing import LabelEncoder #one hot encoded the string columns for label in ['diet', 'kind']: data[label] = LabelEncoder().fit_transform(data[label])
Здесь мы преобразуем эти строковые значения из двух столбцов в целое число, чтобы наша модель могла лучше понять.
Следующий шаг - определить, что мы прогнозируем, иначе говоря, результат! Мы разделим данные и «цель», которую вы могли бы сказать, на X и Y соответственно.
#set target and dataset or X and Y y = data['kind'] X = data.drop(['kind'], axis = 1)
В следующей части начинается самое интересное
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.neural_network import MLPClassifier
params = [{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': 0,
'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': .9,
'nesterovs_momentum': False, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': .9,
'nesterovs_momentum': True, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': 0,
'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': .9,
'nesterovs_momentum': True, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': .9,
'nesterovs_momentum': False, 'learning_rate_init': 0.2},
{'solver': 'adam', 'learning_rate_init': 0.01}]
Здесь мы импортируем важные модули. Первый модуль - это Matplotlib, и это то, что мы будем использовать для визуализации нашей нейронной сети. Следующий - MinMaxScaler, и это важно, потому что он позволяет нам масштабировать наши данные в формат, с которым машина может лучше справиться. Самый важный из них - MLPClassifer, и это здорово, потому что он позволяет нам устанавливать различные параметры и стили обучения, чтобы увидеть, какой из них лучше всего подходит.
Важно то, что вы видите параметры выше. Среди этих параметров - количество слоев, количество нейронов на слой, количество итераций обучения и т. Д. Все это можно настроить, а также можно добавить другие параметры для повышения нашей производительности. Обратите внимание, хотя тезисы отличаются от гиперпараметров!
def plot_on_dataset(X, y, ax, name):
# for each dataset, plot learning for each learning strategy
print("\nlearning on dataset %s" % name)
ax.set_title(name)
X = MinMaxScaler().fit_transform(X)
mlps = []
if name == "digits":
# digits is larger but converges fairly quickly
max_iter = 15
else:
max_iter = 400
for label, param in zip(labels, params):
print("training: %s" % label)
mlp = MLPClassifier(verbose=0, random_state=0,
max_iter=max_iter, **param)
mlp.fit(X, y)
mlps.append(mlp)
print("Training set score: %f" % mlp.score(X, y))
print("Training set loss: %f" % mlp.loss_)
for mlp, label, args in zip(mlps, labels, plot_args):
ax.plot(mlp.loss_curve_, label=label, **args)
Далее мы рассмотрим функцию, которая не только отображает наши данные, но и масштабирует X, а также использует MLPClassifer и наши параметры, которые мы установили выше, для запуска нашей нейронной сети.
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
data_sets = [(X,y)]
for ax, data, name in zip(axes.ravel(), data_sets, ['exercise']):
plot_on_dataset(*data, ax=ax, name=name)
# can scale up to 4 I only have 1 dataset
fig.legend(ax.get_lines(), labels, ncol=2, loc="upper center")
plt.show()
Наконец, мы устанавливаем фигуру и ось, а также проверяем, что мы установили наш data_set равным X и y. После этого мы берем нашу ось и данные, затем устанавливаем имя нашего графика (неважно, что вы здесь говорите) и, наконец, показываем все с помощью plt.show ()

Как видите, нейронные сети не так уж сложны, как выглядят, но большая часть работы, как всегда, связана с подготовкой данных и настройкой модели.