Python скрипты для ИИ: библиотека 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. Выбор конкретного подхода зависит от задачи и данных.
Расширенные примеры скриптов с 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())
Эти примеры позволяют расширить функциональность базовых скриптов и адаптировать их под специфические задачи искусственного интеллекта.