Python скрипты для ИИ: библиотека Scikit-learn

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

Основные скрипты для машинного обучения с Scikit-learn

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


import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report
import joblib

# Загрузка данных
df = pd.read_csv('data.csv')
X = df.drop('target', axis=1)
y = df['target']

# Кодирование целевой переменной, если она текстовой
le = LabelEncoder()
y_encoded = le.fit_transform(y)

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

# Создание и обучение модели
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# Оценка с помощью кросс-валидации
scores = cross_val_score(model, X_train, y_train, cv=5)
print('Средняя точность на кросс-валидации: {:.2f}'.format(scores.mean()))

# Оценка на тестовой выборке
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

# Сохранение модели и кодировщика
joblib.dump(model, 'model.pkl')
joblib.dump(le, 'label_encoder.pkl')
  

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

Такой скрипт позволяет быстро получить рабочую модель и сохранить её для дальнейшего использования. Важно: перед обучением выполняется кодирование меток, а данные разделяются случайным образом. При работе с реальными проектами рекомендуется дополнительно выполнять нормализацию признаков.

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

  • Игнорирование пропусков в данных - модель выдаст ошибку. Необходимо предварительно заполнить или удалить пропуски.
  • Утечка данных при кодировании целевой переменной до разделения - допускается только для меток, но не для признаков.
  • Сохранение модели после обучения без тестирования - оценка на отложенной выборке обязательна.

Как объединить этапы обработки данных в один скрипт?

Объединение предобработки и обучения в конвейер (Pipeline) упрощает код и предотвращает утечку данных. Пример:


from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestClassifier

# Определение колонок с разными типами данных
numeric_features = ['age', 'income']
categorical_features = ['gender', 'education']

# Трансформер для числовых признаков
numeric_transformer = Pipeline(steps=[
    ('scaler', StandardScaler())
])

# Трансформер для категориальных признаков
categorical_transformer = Pipeline(steps=[
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# Общий трансформер
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)
    ])

# Полный пайплайн
clf = Pipeline(steps=[('preprocessor', preprocessor),
                      ('classifier', RandomForestClassifier())])

# Обучение (X содержит все признаки, предобработка выполняется автоматически)
clf.fit(X_train, y_train)
  

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

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

Проблема: несовместимость типов данных - OneHotEncoder может работать только с категориальными колонками, которые предварительно нужно определить как object или category. Если колонка имеет числовой тип, её необходимо преобразовать.

Как автоматизировать поиск лучших параметров модели?

GridSearchCV перебирает заданные комбинации гиперпараметров и выбирает оптимальные на основе кросс-валидации. Пример для логистической регрессии:


from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV

param_grid = {
    'C': [0.1, 1, 10],
    'penalty': ['l2', 'l1'],
    'solver': ['liblinear']
}

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

print('Лучшие параметры:', grid.best_params_)
print('Лучшая точность:', grid.best_score_)
  

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

Совет: для больших сеток используйте RandomizedSearchCV, чтобы сократить время поиска.

Ошибка: несоответствие параметров выбранной модели - например, указание 'solver': 'lbfgs' для L1 регуляризации вызовет ошибку. Всегда проверяйте документацию.

Как сохранить обученную модель для последующего использования?

Библиотека joblib эффективно сохраняет большие модели и объекты NumPy. Вариант использования:


import joblib

# Сохранение
joblib.dump(model, 'random_forest_model.pkl')

# Загрузка
loaded_model = joblib.load('random_forest_model.pkl')
predictions = loaded_model.predict(X_new)
  

Менее распространённый, но возможный способ - использование pickle (родной модуль Python). Однако для больших объектов joblib быстрее.

Проблема: версионность - модель, обученная в одной версии Scikit-learn, может не загрузиться в другой. Рекомендуется указывать версии библиотек в requirements.txt.

Эти варианты охватывают основные сценарии создания скриптов для искусственного интеллекта на Python с использованием Scikit-learn. Выбор конкретного подхода зависит от задачи и данных.

- статистическая библиотека python (статистическая библиотека python (scipy, statsmodels))
- создание нейросетей на python (создание нейронных сетей на python (tensorflow, pytorch))
- Ai script python (скрипты для искусственного интеллекта на python)

Расширенные примеры скриптов с Scikit-learn

1. Кастомный трансформер в пайплайне

Пример

from sklearn.base import BaseEstimator, TransformerMixin

class FeatureSelector(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns
    def fit(self, X, y=None):
        return self
    def transform(self, X):
        return X[self.columns]

selector = FeatureSelector(columns=['age', 'income'])
X_selected = selector.transform(X)

2. Ансамбль VotingClassifier

Пример

from sklearn.ensemble import VotingClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier

voting_clf = VotingClassifier(estimators=[
    ('rf', RandomForestClassifier(n_estimators=50)),
    ('svm', SVC(probability=True)),
    ('dt', DecisionTreeClassifier())
], voting='soft')
voting_clf.fit(X_train, y_train)
print('Точность ансамбля:', voting_clf.score(X_test, y_test))
Точность ансамбля: 0.92

3. Вероятностные предсказания и пороговое значение

Пример

probs = model.predict_proba(X_test)[:, 1]
threshold = 0.7
y_custom = (probs >= threshold).astype(int)
print('Предсказания с порогом 0.7:', y_custom[:10])
Предсказания с порогом 0.7: [1 0 1 0 0 1 1 0 1 0]

4. Кривые обучения для диагностики модели

Пример

from sklearn.model_selection import learning_curve
import numpy as np

train_sizes, train_scores, test_scores = learning_curve(
    RandomForestClassifier(), X, y, cv=5, train_sizes=np.linspace(0.1, 1.0, 5))
print('Размеры выборок:', train_sizes)
print('Средняя точность на обучении:', np.mean(train_scores, axis=1))
print('Средняя точность на валидации:', np.mean(test_scores, axis=1))
Размеры выборок: [ 178  356  534  712  890]
Средняя точность на обучении: [0.99 0.99 0.99 0.99 0.99]
Средняя точность на валидации: [0.88 0.90 0.91 0.91 0.92]

5. Сохранение модели в формате ONNX (кросс-платформенный)

Пример

from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

initial_type = [('float_input', FloatTensorType([None, X.shape[1]]))]
onx_model = convert_sklearn(model, initial_types=initial_type)
with open('model.onnx', 'wb') as f:
    f.write(onx_model.SerializeToString())

Эти примеры позволяют расширить функциональность базовых скриптов и адаптировать их под специфические задачи искусственного интеллекта.

Скрипты для искусственного интеллекта на Python - comments

En
Ai script python (python)