Практическое применение Scikit-learn для задач Data Science
Основы машинного обучения с 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-ближайших соседей.
Расширенные примеры с 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