Практическое применение Scikit-learn для задач Data Science

Раздел: Data Science -> Scikit-learn

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

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

Оптимальный подход включает предобработку данных, выбор модели и кросс-валидацию. Используем Pipeline из Scikit-learn для объединения шагов.


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

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

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(max_iter=200))
])
pipeline.fit(X_train, y_train)
scores = cross_val_score(pipeline, X_train, y_train, cv=5)
print(scores)

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

[0.95833333 1.         0.95833333 0.95833333 1.        ]

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

Проблема: при использовании StandardScaler с разреженными данными (например, текстовыми) могут возникнуть ошибки. Решение: использовать MaxAbsScaler или Normalizer.

Как выбрать алгоритм машинного обучения?

Для линейных зависимостей подходит LogisticRegression, для нелинейных - RandomForestClassifier или SVC.


from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC

# Вариант 1: случайный лес
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
print(rf.score(X_test, y_test))

# Вариант 2: SVM с RBF-ядром
svm = SVC(kernel='rbf', gamma='scale')
svm.fit(X_train, y_train)
print(svm.score(X_test, y_test))

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

0.9666666666666667
1.0

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

Ошибка: SVC чувствителен к масштабу признаков. Без предварительного масштабирования точность может снизиться. Всегда применяйте стандартизацию.

Как выполнить кластеризацию без учителя?

KMeans - популярный метод. Определите количество кластеров через inertia или silhouette_score.


from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

kmeans = KMeans(n_clusters=3, random_state=42)
labels = kmeans.fit_predict(X_train)
print('Silhouette:', silhouette_score(X_train, labels))

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

Silhouette: 0.5519322659226976

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

Проблема: выбор K может быть неочевидным. Используйте Elbow Method или Gap Statistic.

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

Примените OneHotEncoder из sklearn.preprocessing.


from sklearn.preprocessing import OneHotEncoder
import numpy as np

categories = np.array([['red'], ['blue'], ['green'], ['red']])
encoder = OneHotEncoder(sparse_output=False)
encoded = encoder.fit_transform(categories)
print(encoded)

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

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]
 [1. 0. 0.]]

Ошибка: OneHotEncoder по умолчанию создает разреженную матрицу. Установите sparse_output=False для плотного массива, если планируете использовать k-ближайших соседей.

- нейросеть python (нейросеть на python)
- Python создание модели (создание модели машинного обучения на python)
- рекомендательная система python (разработка рекомендательной системы на python)

Расширенные примеры с Scikit-learn

Как провести подбор гиперпараметров с помощью GridSearchCV?

Пример

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10]
}
grid = GridSearchCV(RandomForestClassifier(random_state=42), 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: {'max_depth': 10, 'min_samples_split': 2, 'n_estimators': 100}
Best score: 0.9666666666666667

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

Пример

import joblib

joblib.dump(pipeline, 'iris_model.pkl')
loaded_model = joblib.load('iris_model.pkl')
print(loaded_model.predict(X_test[:5]))
[0 1 2 1 1]

Как интерпретировать предсказания модели с помощью SHAP?

Пример

import shap

# Предварительно обученная модель RandomForest
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test[:10])
shap.summary_plot(shap_values, X_test[:10], feature_names=data.feature_names)
[график в среде Jupyter]

Ошибка: SHAP требует большого объема памяти для больших наборов данных. Используйте KernelExplainer с выборкой.

Как создать пользовательский трансформер в Pipeline?

Пример

from sklearn.base import BaseEstimator, TransformerMixin

class SelectColumns(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]

pipeline_custom = Pipeline([
    ('selector', SelectColumns([0, 2])),
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression())
])
pipeline_custom.fit(X_train, y_train)
print(pipeline_custom.score(X_test, y_test))
0.8666666666666667

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

Пример

from imblearn.over_sampling import SMOTE
from imblearn.pipeline import Pipeline as ImbPipeline

imb_pipeline = ImbPipeline([
    ('smote', SMOTE(random_state=42)),
    ('clf', RandomForestClassifier(random_state=42))
])
imb_pipeline.fit(X_train, y_train)
print(imb_pipeline.score(X_test, y_test))
0.9333333333333333

искусственный интеллект на Python - comments

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