Этапы создания ML-модели на Python

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

Создание модели машинного обучения включает несколько этапов: подготовка данных, выбор алгоритма, обучение и оценка. Библиотека Scikit-learn предоставляет удобные инструменты для каждого шага. Рассмотрим различные подходы к построению моделей и их особенности.

Базовый подход: разделение данных и обучение классификатора

Как создать и обучить модель классификации на размеченных данных?

Наиболее распространенный способ - использовать функцию train_test_split для разделения на обучающую и тестовую выборки, затем выбрать модель, например, логистическую регрессию, и обучить ее.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

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

model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print(f"Точность: {score:.2f}")

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

Точность: 0.97

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

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

  • Забыть задать random_state - результаты становятся невоспроизводимыми.
  • Игнорировать дисбаланс классов - точность может быть обманчивой. Решение: использовать стратифицированное разделение (stratify=y).
  • Не устанавливать max_iter для логистической регрессии - может не сойтись.

Цель: быстро получить работающий классификатор для сравнения с более сложными моделями.

Варианты решения: выбор подходящей модели

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

Для прогнозирования непрерывных значений используют линейную регрессию или дерево регрессии. Приведем пример с линейной регрессией на данных о ценах на жилье.

from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error

diabetes = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(diabetes.data, diabetes.target, test_size=0.2)

lr = LinearRegression()
lr.fit(X_train, y_train)
pred = lr.predict(X_test)
mse = mean_squared_error(y_test, pred)
print(f"MSE: {mse:.2f}")

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

MSE: 2694.91

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

Проблема: линейная регрессия предполагает линейную зависимость. Если связь нелинейная, ошибка велика. Решение: попробовать полиномиальные признаки или другие модели.

Как улучшить качество с помощью ансамблей?

Случайный лес (RandomForest) часто дает более высокую точность без тонкой настройки.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
score_rf = rf.score(X_test, y_test)
print(f"Точность случайного леса: {score_rf:.2f}")

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

Точность случайного леса: 0.97

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

Ошибка: переобучение при большом количестве деревьев без ограничения глубины. Решение: задать max_depth и min_samples_split.

Как обрабатывать категориальные признаки?

Используйте OneHotEncoder или OrdinalEncoder из модуля preprocessing. Пример с датасетом «титаник».

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

df = pd.DataFrame({'пол': ['муж', 'жен', 'жен'], 'возраст': [22, 35, 28]})
X = df[['пол', 'возраст']]
ct = ColumnTransformer([('ohe', OneHotEncoder(), ['пол'])], remainder='passthrough')
X_encoded = ct.fit_transform(X)
print(X_encoded)

библиотека scikit python (библиотека scikit-learn для python)

[[0. 1. 22.]
 [1. 0. 35.]
 [1. 0. 28.]]

Типичная ошибка: кодирование без преобразования в числовой массив может привести к ошибкам при обучении. Используйте ColumnTransformer вместе с пайплайном.

- нейросеть с помощью python (нейросети на python)
- Ai script python (скрипты для искусственного интеллекта на python)
- Random forest python (random forest в python)

Расширенные примеры построения моделей

Пайплайн предобработки и подбор гиперпараметров

Объединение масштабирования, кодирования и модели в конвейер упрощает процесс и предотвращает утечку данных.

Пример
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', SVC())
])
param_grid = {'svm__C': [0.1, 1, 10], 'svm__gamma': [0.01, 0.1, 1]}
grid = GridSearchCV(pipe, param_grid, cv=5, scoring='accuracy')
grid.fit(X_train, y_train)
print("Best params:", grid.best_params_)
print("Best score:", grid.best_score_)
Best params: {'svm__C': 1, 'svm__gamma': 0.1}
Best score: 0.9667

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

Извлечение важности признаков (Feature Importance)

Для моделей на основе деревьев можно получить ранжирование признаков по важности.

Пример
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_diabetes
import pandas as pd

diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
rf = RandomForestRegressor(n_estimators=200, random_state=42)
rf.fit(X, y)
feature_importances = pd.DataFrame({
    'feature': diabetes.feature_names,
    'importance': rf.feature_importances_
}).sort_values('importance', ascending=False)
print(feature_importances)
    feature  importance
3        bmi    0.356284
1         s5    0.194256
0         age    0.123456
...

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

Для использования модели в продакшене полезно сохранять ее с помощью библиотеки joblib.

Пример
from sklearn.ensemble import RandomForestClassifier
import joblib

model = RandomForestClassifier(n_estimators=50)
model.fit(X_train, y_train)
# Сохранение
joblib.dump(model, 'model.pkl')
# Загрузка
loaded_model = joblib.load('model.pkl')
pred = loaded_model.predict(X_test[:1])
print(pred)
[0]

Примечание: joblib предпочтительнее pickle для больших массивов NumPy.

Кросс-валидация с несколькими метриками

Оценка модели по нескольким показателям одновременно.

Пример
from sklearn.model_selection import cross_validate
from sklearn.linear_model import LogisticRegression

model = LogisticRegression(max_iter=200)
scores = cross_validate(model, X, y, cv=5,
                        scoring=['accuracy', 'precision_macro', 'recall_macro'])
print("Accuracy:", scores['test_accuracy'].mean())
print("Precision:", scores['test_precision_macro'].mean())
Accuracy: 0.9733
Precision: 0.9740

Создание модели машинного обучения на Python - comments

En
Python создание модели (python)