Создание нейросетей на языке Python: от основ до сложных решений

Раздел: Машинное обучение и ИИ -> scikit-learn

Нейросети на Python: введение и основные подходы

Как создать нейросеть для классификации с помощью Scikit-learn?

Библиотека Scikit-learn предоставляет класс MLPClassifier (многослойный перцептрон) для задач классификации. Это простой способ начать работу с нейросетями без установки дополнительных фреймворков. Рассмотрим пример на наборе данных Iris.


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score

# Загрузка данных
iris = load_iris()
X, y = iris.data, iris.target

# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Масштабирование признаков (обязательно для нейросетей)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Создание и обучение модели
mlp = MLPClassifier(hidden_layer_sizes=(10, 5), max_iter=500, random_state=42)
mlp.fit(X_train, y_train)

# Прогнозирование и оценка
y_pred = mlp.predict(X_test)
print(f'Точность: {accuracy_score(y_test, y_pred):.2f}')

библиотеки для машинного обучения python (библиотеки для машинного обучения в python (scikit-learn, tensorflow, pytorch))

Точность: 1.00

задачи машинного обучения python (задачи машинного обучения на python)

Пояснение шагов: масштабирование признаков необходимо, так как нейроны чувствительны к разным масштабам. Параметр hidden_layer_sizes задает количество нейронов в скрытых слоях. В примере два скрытых слоя (10 и 5 нейронов). Параметр max_iter ограничивает число итераций оптимизации.

Типичные проблемы и ошибки:

  • Низкая точность – часто из-за отсутствия масштабирования. Всегда применяйте StandardScaler.
  • Предупреждение о сходимости – увеличьте max_iter или измените solver (например, 'adam').
  • Переобучение – уменьшите количество нейронов или добавьте регуляризацию (параметр alpha).

Как реализовать нейросеть с нуля на Python (без готовых библиотек)?

Понимание внутреннего устройства нейросети достигается написанием кода с использованием только NumPy. Этот вариант подходит для обучения и экспериментов.


import numpy as np

# Сигмоидная функция активации
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return x * (1 - x)

# Входные данные (XOR)
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([[0], [1], [1], [0]])

np.random.seed(42)
# Веса и смещения
w0 = np.random.random((2, 4)) - 0.5
b0 = np.random.random((1, 4)) - 0.5
w1 = np.random.random((4, 1)) - 0.5
b1 = np.random.random((1, 1)) - 0.5

lr = 0.5
for epoch in range(10000):
    # Прямой проход
    z0 = np.dot(X, w0) + b0
    a0 = sigmoid(z0)
    z1 = np.dot(a0, w1) + b1
    a1 = sigmoid(z1)

    # Обратное распространение ошибки
    error = y - a1
    delta1 = error * sigmoid_derivative(a1)
    error_hidden = delta1.dot(w1.T)
    delta0 = error_hidden * sigmoid_derivative(a0)

    # Обновление весов
    w1 += a0.T.dot(delta1) * lr
    b1 += np.sum(delta1, axis=0, keepdims=True) * lr
    w0 += X.T.dot(delta0) * lr
    b0 += np.sum(delta0, axis=0, keepdims=True) * lr

print('Результат после обучения:')
print(a1)

Feature names python (имена признаков в python)

Результат после обучения:
[[0.008]
 [0.992]
 [0.992]
 [0.009]]

искусственный интеллект на языке python (искусственный интеллект на python)

Пояснение: реализуется двухслойная сеть для задачи XOR. Используется сигмоидная активация и стохастический градиентный спуск. Код демонстрирует основные принципы обратного распространения.

Проблемы:

  • Выбор скорости обучения (lr): слишком большое значение приводит к расходимости, слишком малое – к медленной сходимости.
  • Затухающие градиенты при сигмоиде в глубоких сетях.
  • Для реальных задач такая реализация неэффективна – используйте готовые библиотеки.

Как использовать Keras (TensorFlow) для создания нейросети?

Фреймворк Keras предоставляет высокоуровневый API для быстрого прототипирования. Подходит для продакшн-задач.


from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, StandardScaler
import numpy as np

# Данные
iris = load_iris()
X, y = iris.data, iris.target.reshape(-1, 1)
encoder = OneHotEncoder(sparse=False)
y_onehot = encoder.fit_transform(y)

X_train, X_test, y_train, y_test = train_test_split(X, y_onehot, test_size=0.2, random_state=42)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Модель
model = Sequential([
    Dense(10, activation='relu', input_shape=(4,)),
    Dense(5, activation='relu'),
    Dense(3, activation='softmax')
])

model.compile(optimizer=Adam(learning_rate=0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(X_train, y_train, epochs=50, batch_size=8, validation_split=0.2, verbose=0)

# Оценка
loss, acc = model.evaluate(X_test, y_test, verbose=0)
print(f'Точность на тесте: {acc:.2f}')

Python model (модели в python (машинное обучение))

Точность на тесте: 1.00

статистическая библиотека python (статистическая библиотека python (scipy, statsmodels))

Пояснение: используется OneHotEncoder для целевых меток. Модель состоит из трех полносвязных слоев. Функция потерь categorical_crossentropy подходит для многоклассовой классификации.

Типичные ошибки:

  • Несоответствие размерности выходного слоя числу классов.
  • Игнорирование масштабирования данных.
  • Забывание one-hot encoding для категориальной кросс-энтропии.

Как применить нейросеть для задачи регрессии с MLPRegressor?

Scikit-learn также содержит MLPRegressor для регрессионных задач. Пример на данных о ценах на жилье (Boston).


from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error

diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

reg = MLPRegressor(hidden_layer_sizes=(50, 25), max_iter=500, random_state=42)
reg.fit(X_train, y_train)

y_pred = reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f'Среднеквадратичная ошибка: {mse:.2f}')

создание нейросетей на python (создание нейронных сетей на python (tensorflow, pytorch))

Среднеквадратичная ошибка: 2876.34

Пояснение: для регрессии используется выходной нейрон без активации (linear). Параметры аналогичны MLPClassifier.

Проблемы:

  • Чувствительность к выбросам – предварительно обрабатывайте данные.
  • Трудности с подбором архитектуры: слишком малая сеть недообучается, слишком большая – переобучается.
- Python время обучения (время обучения модели в python)
- машинное обучение на данных python (машинное обучение на данных с помощью python)
- нейросеть python (нейросеть на python)

Расширенные примеры работы с нейросетями на Python

Пример 1: Настройка гиперпараметров MLPClassifier с GridSearchCV

Поиск оптимальных параметров (количество слоёв, нейронов, alpha, solver) с помощью кросс-валидации.

Пример

from sklearn.datasets import load_iris
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

param_grid = {
    'hidden_layer_sizes': [(10,), (20,), (10, 5)],
    'alpha': [0.0001, 0.001, 0.01],
    'solver': ['adam', 'sgd']
}

grid = GridSearchCV(MLPClassifier(max_iter=300, random_state=42), param_grid, cv=5)
grid.fit(X_train, y_train)

print('Лучшие параметры:', grid.best_params_)
print('Лучшая точность на кросс-валидации:', grid.best_score_)
y_pred = grid.predict(X_test)
print('Точность на тесте:', accuracy_score(y_test, y_pred))
Лучшие параметры: {'alpha': 0.0001, 'hidden_layer_sizes': (10, 5), 'solver': 'adam'}
Лучшая точность на кросс-валидации: 0.975
Точность на тесте: 1.00

Пример 2: Ранняя остановка (Early Stopping) в Keras

Использование колбэка EarlyStopping для предотвращения переобучения.

Пример

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np

X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

model = Sequential([
    Dense(128, activation='relu', input_shape=(20,)),
    Dropout(0.3),
    Dense(64, activation='relu'),
    Dropout(0.3),
    Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

early_stop = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)

history = model.fit(X_train, y_train, epochs=200, batch_size=32,
                    validation_split=0.2, callbacks=[early_stop], verbose=0)

loss, acc = model.evaluate(X_test, y_test, verbose=0)
print(f'Точность на тесте: {acc:.2f}')
Точность на тесте: 0.97

Пример 3: Визуализация кривых обучения

График потерь на обучении и валидации для отслеживания сходимости.

Пример

import matplotlib.pyplot as plt
# Используем историю из предыдущего примера (history)
plt.figure(figsize=(10, 5))
plt.plot(history.history['loss'], label='Training loss')
plt.plot(history.history['val_loss'], label='Validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.title('Кривые обучения')
plt.show()
(Отображается график с двумя линиями, сходящимися к плато)

нейросети на python - comments

En
нейросеть с помощью python (python)