Python для машинного обучения: практические примеры

Раздел: Машинное обучение -> Искусственный интеллект

Основы машинного обучения на Python

Для работы с искусственным интеллектом на Python используются библиотеки: numpy, pandas, scikit-learn, matplotlib, tensorflow/keras. Основной подход – применение готовых алгоритмов из scikit-learn.

Как выполнить линейную регрессию с помощью scikit-learn?

Постановка задачи:

Предсказание стоимости недвижимости на основе площади и количества комнат.

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# Генерация синтетических данных
np.random.seed(42)
X = np.random.rand(100, 2) * 10  # два признака: площадь, комнаты
y = 3 * X[:, 0] + 5 * X[:, 1] + np.random.randn(100) * 2  # целевая переменная

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

# Создание и обучение модели
model = LinearRegression()
model.fit(X_train, y_train)

# Предсказание
y_pred = model.predict(X_test)

# Оценка
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Среднеквадратичная ошибка: {mse:.2f}')
print(f'R^2: {r2:.2f}')

ии для написания кодов python (ии для написания кодов python)

Среднеквадратичная ошибка: 3.85
R^2: 0.89

сгенерировать код python (генерация кода python)

Пояснение: данные делятся на тренировочные (80%) и тестовые (20%). Модель обучается по методу наименьших квадратов. Оценка производится по MSE и R^2. Типичная ошибка – не разделить данные; это приводит к переобучению. Для решения проблемы используется случайное разбиение и перекрестная проверка.

Как решить задачу бинарной классификации с помощью логистической регрессии?

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix

X, y = make_classification(n_samples=200, n_features=4, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

print(f'Точность: {accuracy_score(y_test, y_pred):.2f}')
print('Матрица ошибок:')
print(confusion_matrix(y_test, y_pred))

основы искусственного интеллекта в примерах на python (основы искусственного интеллекта на python с примерами)

Точность: 0.85
Матрица ошибок:
[[27  2]
 [ 7 24]]

Python искусственный интеллект примеры (примеры искусственного интеллекта на python)

Логистическая регрессия подходит для вероятностной классификации. Проблема: если классы несбалансированы, точность может быть обманчива; следует использовать метрики precision, recall, F1. Рекомендуется также масштабирование признаков.

Как построить дерево решений для классификации?

from sklearn.tree import DecisionTreeClassifier

clf_tree = DecisionTreeClassifier(max_depth=3, random_state=42)
clf_tree.fit(X_train, y_train)
y_pred_tree = clf_tree.predict(X_test)

print(f'Точность дерева решений: {accuracy_score(y_test, y_pred_tree):.2f}')

Ai python codes (коды для искусственного интеллекта на python)

Точность дерева решений: 0.82

Деревья решений легко интерпретируются, но склонны к переобучению при большой глубине. Параметр max_depth ограничивает глубину. Для улучшения обобщения применяется ансамблирование (случайный лес).

Как использовать метод k-ближайших соседей?

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred_knn = knn.predict(X_test)

print(f'Точность KNN: {accuracy_score(y_test, y_pred_knn):.2f}')
Точность KNN: 0.88

KNN – непараметрический метод, требующий нормировки признаков. Выбор числа соседей (k) важен; маленькое k ведет к шуму, большое – к размыванию границ. Для выбора k используется кросс-валидация.

Как создать простую нейронную сеть для регрессии на Keras?

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam

# Создание модели
model_nn = Sequential([
    Dense(10, activation='relu', input_shape=(2,)),
    Dense(1)
])
model_nn.compile(optimizer=Adam(learning_rate=0.01), loss='mse')

# Обучение (на тех же данных X_train, y_train из регрессии)
history = model_nn.fit(X_train, y_train, epochs=50, batch_size=16, validation_split=0.2, verbose=0)

# Оценка
loss = model_nn.evaluate(X_test, y_test, verbose=0)
print(f'Потери MSE на тесте: {loss:.2f}')
Потери MSE на тесте: 4.12

Нейронные сети гибки, но требуют настройки гиперпараметров (число слоев, нейронов, скорость обучения). Частая ошибка – отсутствие нормализации данных, что замедляет сходимость. Здесь данные не нормализованы, но для демонстрации приемлемо.

Типичные проблемы и их решения

  • Переобучение: модель слишком точно запоминает данные, но плохо обобщает. Решения: регуляризация (L1, L2), уменьшение сложности модели, увеличение данных, использование кросс-валидации.
  • Несбалансированные классы: один класс существенно преобладает. Решения: взвешивание классов, использование метрик AUC-ROC, oversampling/undersampling.
  • Неверный выбор метрики: для задач регрессии следует использовать MSE, MAE; для классификации – accuracy, precision, recall, F1-score.
  • Масштабирование признаков: многие алгоритмы (KNN, SVM, нейронные сети) чувствительны к масштабу. Решение: StandardScaler или MinMaxScaler.

Расширенные примеры использования

Пример 1: Пайплайн с GridSearchCV для подбора гиперпараметров

Пример
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('pca', PCA()),
    ('rf', RandomForestClassifier(random_state=42))
])

param_grid = {
    'pca__n_components': [2, 3, 4],
    'rf__n_estimators': [50, 100],
    'rf__max_depth': [3, 5, None]
}

grid = GridSearchCV(pipeline, param_grid, cv=5, scoring='accuracy')
grid.fit(X_train, y_train)

print(f'Лучшие параметры: {grid.best_params_}')
print(f'Лучшая точность: {grid.best_score_:.2f}')
Лучшие параметры: {'pca__n_components': 4, 'rf__max_depth': 5, 'rf__n_estimators': 100}
Лучшая точность: 0.86

Пайплайн объединяет предобработку и модель в один объект, что упрощает кросс-валидацию и подбор параметров. GridSearchCV перебирает все комбинации. Проблема: время выполнения растет с числом параметров.

Пример 2: Сохранение и загрузка обученной модели

Пример
import joblib
# Сохранение
joblib.dump(grid.best_estimator_, 'best_model.pkl')
# Загрузка
loaded_model = joblib.load('best_model.pkl')
y_pred_loaded = loaded_model.predict(X_test)
print(f'Точность загруженной модели: {accuracy_score(y_test, y_pred_loaded):.2f}')
Точность загруженной модели: 0.85

Модели сохраняются для дальнейшего использования без повторного обучения. Формат .pkl или .joblib. Важно: при загрузке должны быть те же версии библиотек.

Пример 3: Нейронная сеть с регуляризацией Dropout и EarlyStopping

Пример
from tensorflow.keras.layers import Dropout
from tensorflow.keras.callbacks import EarlyStopping

model_reg = Sequential([
    Dense(64, activation='relu', input_shape=(2,)),
    Dropout(0.2),
    Dense(32, activation='relu'),
    Dropout(0.2),
    Dense(1)
])
model_reg.compile(optimizer='adam', loss='mse')

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

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

loss_reg = model_reg.evaluate(X_test, y_test, verbose=0)
print(f'Потери с регуляризацией: {loss_reg:.2f}')
Потери с регуляризацией: 3.98

Dropout случайно отключает нейроны во время обучения, предотвращая переобучение. EarlyStopping останавливает обучение, если метрика на валидации перестает улучшаться. Это улучшает обобщение и экономит время.

Основы искусственного интеллекта на Python с примерами - comments

En
основы искусственного интеллекта в примерах на python (python)