Вернуться на страницу brain2net: https://brain2net.ru/post/mnogoslojnyj-perseptron-klassifikacziya-i-regressiya/

Нейронная сеть. Классификатор

In [11]:
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import numpy as np
In [13]:
import matplotlib.pyplot as plt
%matplotlib inline

Функции активизации

In [15]:
line = np.linspace(-3, 3, 100)
plt.plot(line, np.tanh(line), label="tanh")
plt.plot(line, np.maximum(line, 0), label="relu")
plt.legend(loc="best")
plt.xlabel("x")
plt.ylabel("relu(x), tanh(x)")
plt.grid()

Пример классификации

In [16]:
# Загрузка набора данных Breast Cancer
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
In [17]:
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)

Данные для нейронной сети необходимо отмасштабировать

In [19]:
# вычисляем среднее для каждого признака обучающего набора
mean_on_train = X_train.mean(axis=0)
# вычисляем стандартное отклонение для каждого признака обучающего набора
std_on_train = X_train.std(axis=0)
# вычитаем среднее и затем умножаем на обратную величину стандартного отклонения
# mean=0 и std=1
X_train_scaled = (X_train - mean_on_train) / std_on_train
In [21]:
# используем ТО ЖЕ САМОЕ преобразование (используем среднее и стандартное отклонение
# обучающего набора) для тестового набора
X_test_scaled = (X_test - mean_on_train) / std_on_train
In [22]:
mlp = MLPClassifier(random_state=0)
mlp.fit(X_train_scaled, y_train)
print("Правильность на обучающем наборе: {:.3f}".format(mlp.score(X_train_scaled, y_train)))
print("Правильность на тестовом наборе: {:.3f}".format(mlp.score(X_test_scaled, y_test)))
Правильность на обучающем наборе: 0.991
Правильность на тестовом наборе: 0.965
C:\Users\Dmitry\Anaconda3\lib\site-packages\sklearn\neural_network\_multilayer_perceptron.py:571: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.
  % self.max_iter, ConvergenceWarning)

Предупреждение о том, что достигнуто максимальное число итераций. Оно является неотъемлемой частью алгоритма adam (по умолчанию) и сообщает о том, что целесообразно увеличить число итераций.

Увеличен параметр alpha (значительно - с 0.0001 до 1), чтобы применить к весам более строгую регуляризацию

In [23]:
mlp = MLPClassifier(max_iter=1000, alpha=1, random_state=0)
mlp.fit(X_train_scaled, y_train)
print("Правильность на обучающем наборе: {:.3f}".format(mlp.score(X_train_scaled, y_train)))
print("Правильность на тестовом наборе: {:.3f}".format(mlp.score(X_test_scaled, y_test)))
Правильность на обучающем наборе: 0.988
Правильность на тестовом наборе: 0.972

Вернуться на страницу brain2net: https://brain2net.ru/post/mnogoslojnyj-perseptron-klassifikacziya-i-regressiya/

In [ ]: