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 останавливает обучение, если метрика на валидации перестает улучшаться. Это улучшает обобщение и экономит время.