Набор инструментов Data Scientist: гайд по использованию основных функций sklearn с примерами кода.
Набор инструментов Data Scientist: использование основных функций sklearn для достижения успеха
Python имеет множество библиотек, которые делают его одним из наиболее часто используемых языков программирования. Большинство из них имеют схожие функции и могут использоваться друг с другом и достигать одинаковых результатов. Но когда дело доходит до машинного обучения, единственная библиотека, о которой мы можем говорить, это sklearn
.
Являетесь ли вы практиком машинного обучения или новичком, я знаю, что у вас есть некоторый опыт в sklearn
. Но иногда мы используем какие-то инструменты просто потому, что так делают все, не задавая никаких вопросов.
Например, вы когда-нибудь спрашивали себя: «Каковы 5 самых важных особенностей sklearn
?» Что ж, позвольте мне сказать вам одну вещь: мне потребовалось около 2 лет, чтобы задать себе этот вопрос, так что не стыдитесь, если вы этого не сделали.
Итак, в этой статье я отвечу на этот вопрос; и вот что вы найдете здесь:
Содержание:
Особенность №1: Простота использования
Особенность №2: Широкий спектр алгоритмов
Особенность №3: Предварительная обработка данных и конструирование признаков
Особенность №4: Оценка и проверка модели
Особенность №5: Интеграция с экосистемой Python для обработки данных
Примеры написания кода
Особенность № 1: Простота использования
Простота sklearn
опирается на тот факт, что это непротиворечивая библиотека. Что это значит? Ну, это означает, что она имеет:
- Простую интеграцию с внешними библиотеками DL/ML. Её можно интегрировать с внешними библиотеками ML/DL, такими как
Keras
,Tensorflow
иXGBoost
. Эта совместимость даёт нам возможность комбинировать функцииsklearn
с функциями этих библиотек, что делает фазу разработки для нас, специалистов по данным, лёгкой и безболезненной. - Простоту использования.
sklearn
поддерживает один и тот же унифицированный интерфейс для различных алгоритмов машинного обучения, которые она предоставляет. Таким образом, нам не нужно изучать новый синтаксис или шаблоны: нам просто нужно придерживаться «тех же правил» и думать о разработке наших алгоритмов машинного обучения. Можете ли вы представить себе работу с разным синтаксисом для разных алгоритмов при решении сложных задач машинного обучения? Я нет! - Хорошую документацию.
sklearn
предоставляет обширную документацию, включая учебные пособия и примеры использования. Документация также охватывает все аспекты библиотеки, от предварительной обработки данных до оценки модели. Вы можете обратиться к ней здесь .
Особенность № 2: Широкий спектр алгоритмов
Библиотека sklearn
предоставляет очень широкий спектр алгоритмов машинного обучения, от обучения с учителем до обучения без учителя, реализуя как модели регрессии, так и модели классификации для случаев SL.
Эта широкая возможность, которую мы, специалисты по данным, используем. Sklearn
идеальная библиотека для машинного обучения: одна среда для всех моделей, которые нам нужны в нашей повседневной работе.
Нам просто нужно выбрать наиболее подходящий алгоритм для нашей конкретной предметной области, не жалуясь на интеграции и тому подобное: большое преимущество, я считаю!
Особенность № 3: Предварительная обработка данных и конструирование признаков
Предварительная обработка данных и конструирование признаков являются важными частями проблемы ML, поскольку они включают подготовку данных для алгоритмов ML. Вот функции, предоставляемые sklearn
для этих задач:
Предварительная обработка данных
- Работа с отсутствующими данными . Если вы какое-то время практиковали машинное обучение, я уверен, что вы считаете работу с отсутствующими данными болезненной. Или, по крайней мере, только у меня есть такие чувства.
sklearn
дает нам различные возможности для работы с отсутствующими данными, например: классSimpleImputer()
, который позволяет нам вменять пропущенные значения, используя различные стратегии, такие как среднее значение, медиана, мода или постоянное значение. Импутация может применяться к определённым столбцам или ко всему набору данных. б) классIterativeImputer()
, который использует модели ML для итеративного определения пропущенных значений. Он заполняет пропущенные значения, используя прогнозы выбранной модели. в) классMissingIndicator()
, который можно использовать для создания двоичных индикаторов отсутствующих значений в наборе данных. Он добавляет новую функцию, которая отмечает, отсутствовало ли значение изначально или нет, предоставляя модели дополнительную информацию. - Масштабирование характеристик . Функции с разными масштабами могут плохо повлиять на производительность многих алгоритмов машинного обучения. К счастью для нас,
sklearn
предлагает некоторые методы масштабирования функций, такие как: а) стандартизация (StandardScaler()
), которая масштабирует признаки, чтобы иметь нулевое среднее значение и единичную дисперсию, и б) нормализация (MinMaxScaler()
), которая масштабирует функции до определённого диапазона. - Кодирование категориальных переменных . Многие алгоритмы ML не могут напрямую обрабатывать категориальные переменные. По этой причине,
sklearn
предоставляет несколько методов кодирования, таких как: a) однократное кодирование (OneHotEncoder()
) и б) порядковое кодирование (OrdinalEncoder()
) для преобразования категориальных переменных в числовые представления. Это позволяет легко работать с данными в виде строк и преобразовывать их в числа, чтобы мы могли передавать их алгоритмам ML. - Обработка выбросов . Выбросы — ещё одна общая проблема для специалистов по данным, поскольку они влияют на производительность моделей машинного обучения, поэтому они нуждаются в особом подходе.
sklearn
предлагает некоторые методы обнаружения и удаления выбросов, такие как фактор локального выброса (LOF()
) и алгоритм Изолирующего леса (IsolationForest()
).
Конструирование признаков
- Извлечение признаков.
sklearn
предоставляет различные методы для извлечения значимых признаков из наших данных. Как мы знаем, на самом деле не все функции, которые у нас есть, имеют значение для наших задач машинного обучения. В случае выделения признаковsklearn
обеспечивает: а) классCountVectorizer()
, который может преобразовывать текстовые документы в матрицу количества токенов, и б) классTfidfVectorizer()
, который вычисляет частоту термина, обратную частоте документа (TF-IDF), для представления текстовых данных. - Уменьшение размерности.
sklearn
предлагает различные методы уменьшения размерности, которые полезны для уменьшения количества функций при сохранении важной информации. Двумя популярными методами являются: а) анализ главных компонентов (PCA()
) и b) t-распределенное стохастическое встраивание соседей (TSNE()
). - Выбор признаков.
sklearn
предоставляет также несколько методов выбора признаков, таких как: а) одномерный выбор признаков (SelectKBest()
), б) рекурсивное исключение признаков (RFE()
) и c) ранжирование важности признаков на основе древовидных моделей (SelectFromModel()
).
Особенность № 4: Оценка и проверка модели
Оценка и проверка модели являются важными действиями в ML. На самом деле наша роль как специалистов по данным состоит в том, чтобы найти лучшую модель, которая соответствует данным; но что это на самом деле означает?
Это означает, что нам нужно обучить некоторые модели машинного обучения и найти ту, которая даёт наилучшие прогнозы (или классификации) на основе невидимых данных. Это означает, что нам сначала нужно оценить некоторые модели машинного обучения на обучающих данных, а затем проверить их на новых данных. sklearn
предоставляет различные функции, которые помогут нам в решении таких фундаментальных задач, как:
- Методы перекрёстной проверки. Перекрёстная проверка — важный метод оценки модели, который помогает нам справиться с переоснащением. Он работает путём разделения данных на несколько подмножеств, обучения модели на различных комбинациях этих подмножеств и усреднения результатов для оценки производительности модели.
sklearn
предоставляет нам следующие методы перекрёстной проверки: а) k-кратная перекрестная проверка, б) стратифицированная k-кратная перекрестная проверка и в) перекрестная проверка с исключением одного. - Метрики оценки.
sklearn
предлагает широкий спектр показателей оценки, которые позволяют нам количественно оценить эффективность моделей классификации и регрессии. Для задач классификации мы можем назвать, среди прочего, такие показатели, какaccuracy
,precision
,recall
и AUC/ROC. Вместо этого можно оценить задачи регрессии, используя такие показатели, как среднеквадратическая ошибка (MSE
), средняя абсолютная ошибка (MAE
), R² и другие. - Настройка гиперпараметров. Оценка и проверка модели тесно связаны с настройкой гиперпараметров, которая включает в себя выбор наилучшей комбинации параметров модели для получения оптимальной производительности алгоритма машинного обучения.
sklearn
предоставляет такие инструменты, какGridSearchCV
иRandomizedSearchCV
для настройки гиперпараметров с использованием перекрёстной проверки. Эти методы систематически исследуют пространство гиперпараметров и определяют наилучший набор гиперпараметров, обеспечивающих наилучшую производительность модели, на основе выбранной метрики оценки.
Особенность № 5: Интеграция с экосистемой Python для обработки данных
Одна из сверхспособностей sklearn
— это интеграция с экосистемой Python для Data Science. Она позволяет специалистам по данным использовать всю мощь sklearn
с библиотеками и инструментами для обработки данных, визуализации и анализа. Вот несколько примеров:
- Pandas и Numpy. Возможность интеграции
sklearn
с фреймами данныхPandas
позволяет пользователям передавать фреймы данных непосредственно в функции и классы sklearn. Это делает удобным предварительную обработку и очистку данных с помощьюPandas
перед вводом данных в моделиsklearn
.sklearn
также сильно зависит от массивов для представления данныхNumPy
. На самом деле, она может напрямую принимать массивы NumPy в качестве входных данных для обучающих задач. - Matplotlib и Seaborn.
sklearn
предоставляет встроенную поддержку для построения метрик и результатов оценки модели с использованиемMatplotlib
. Это позволяет пользователям визуализировать производительность модели, важность функций и другую соответствующую статистику, помогая нам понять наши модели машинного обучения. Кроме того, посколькуSeaborn
– это библиотека визуализации данных, построенная поверхMatplotlib
,sklearn
также хорошо работает с ней, позволяя пользователям сочетать мощь алгоритмов машинного обучения sklearn с эстетической графикой Seaborn для исследовательского анализа данных и оценки модели.
Примеры написания кода
В этой заключительной части я хочу выделить несколько примеров написания кода. Если у вас есть опыт использования sklearn
, я знаю, что вы понимаете, как этим пользоваться и без меня. Но, пожалуйста, учтите, что здесь дело не в том, чтобы показать, как работают эти функции, а просто в том, чтобы подчеркнуть, как работает рабочий процесс, основываясь на том, что мы сказали в предыдущих частях. К тому же: мы часто используем какие-то инструменты просто ради того, чтобы ими пользоваться и потому, что все так делают, не задавая никаких вопросов.
Пример №1: Интеграция с Pandas и NumPy
Посмотрим интеграцию sklearn
с библиотеками Pandas
и NumPy
. Для простоты мы можем использовать подсказку от ChatGPT.
Подсказка может быть следующей: « Создайте фрейм данных Pandas для регрессионного анализа и сделайте его с 5 функциями. Затем нормализуйте данные и разделите их на обучающие и тестовые наборы. Соответствуйте тестовому набору с моделью линейной регрессии. Выведите R² как для тренировочного набора, так и для тестовых наборов».
И мы получаем следующий ответ:
Конечно! Я создам образец фрейма данных Pandas с пятью функциями, нормализую данные, разделю их на обучающие и тестовые наборы, подойду к модели линейной регрессии и выведу оценки R² как для обучающего, так и для тестового наборов. Вот пример реализации:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.preprocessing import StandardScaler
# Generating random features with at least 50 occurrences each
np.random.seed(42)
feature1 = np.random.randint(0, 10, size=100)
feature2 = np.random.randint(0, 10, size=100)
feature3 = np.random.randint(0, 10, size=100)
feature4 = np.random.randint(0, 10, size=100)
feature5 = np.random.randint(0, 10, size=100)
target = np.random.randint(0, 100, size=100)
# Creating a Pandas data frame
data = {
'Feature1': feature1,
'Feature2': feature2,
'Feature3': feature3,
'Feature4': feature4,
'Feature5': feature5,
'Target': target
}
df = pd.DataFrame(data)
# Splitting the data into features and target
X = df.drop('Target', axis=1)
y = df['Target']
# Normalizing the data using StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Splitting the normalized data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# Fitting the linear regression model
reg_model = LinearRegression()
reg_model.fit(X_train, y_train)
# Predicting the target variable for both train and test sets
y_train_pred = reg_model.predict(X_train)
y_test_pred = reg_model.predict(X_test)
# Calculating R² scores for train and test sets
r2_train = r2_score(y_train, y_train_pred)
r2_test = r2_score(y_test, y_test_pred)
# Printing the R² scores
print("R² score for train set:", r2_train)
print("R² score for test set:", r2_test)
В этом примере я создал фрейм данных Pandas с пятью функциями (
Feature1
кFeature5
) и одной целевой переменной (Target
). Затем я использовалStandardScaler
из scikit-learn, чтобы нормализовать данные признаков. После этого я разделил нормализованные данные на обучающие и тестовые наборы, используя соотношение 80:20. Затем я обучил модель линейной регрессии на тренировочном наборе и предсказал целевые переменные как для тренировочного набора, так и для тестовых наборов. Наконец, я рассчитал и вывел оценки R² для наборов.
Итак, как мы видим, у нас есть прямой рабочий процесс, который начинается с NumPy
и заканчивается sklearn
, давая нам необходимые результаты. Никаких «странных манипуляций» или интеграций не нужно.
Пример №2: Интеграция с Matplotlib
Чтобы показать интеграцию между sklearn
и Matplotlib
, мы снова используем ChatGPT со следующей подсказкой: « Создайте задачу бинарной классификации в Python с данными, сгенерированными в NumPy. Стандартизируйте и разделите данные на обучающие и тестовые наборы. Подберите тренировочный набор со случайным лесом и классификаторами KNN. Выведите ROC-кривую для тренировочного набора».
И мы получаем:
Конечно! Давайте создадим задачу бинарной классификации, используя случайно сгенерированные данные в Python, а затем стандартизируем и разделим данные на наборы для обучения и тестирования. Мы подберем тренировочный набор, используя классификаторы случайного леса и K-ближайших соседей (KNN), и, наконец, построим кривую ROC для тренировочного набора.
Вот код:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
# Set a random seed for reproducibility
np.random.seed(42)
# Generate random data
num_samples = 1000
num_features = 10
# Generate features (X)
X = np.random.randn(num_samples, num_features)
# Generate labels (y)
y = np.random.randint(2, size=num_samples)
# Standardize the features
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
# Split the data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Fit the train set using random forest classifier
rf_clf = RandomForestClassifier()
rf_clf.fit(X_train, y_train)
# Fit the train set using K-nearest neighbors (KNN) classifier
knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train, y_train)
# Predict probabilities for the positive class (class 1)
y_train_rf_probs = rf_clf.predict_proba(X_train)[:, 1]
y_train_knn_probs = knn_clf.predict_proba(X_train)[:, 1]
# Calculate the false positive rate (FPR), true positive rate (TPR), and thresholds for the ROC curve
rf_fpr, rf_tpr, rf_thresholds = roc_curve(y_train, y_train_rf_probs)
knn_fpr, knn_tpr, knn_thresholds = roc_curve(y_train, y_train_knn_probs)
# Calculate the AUC score for the ROC curve
rf_auc = roc_auc_score(y_train, y_train_rf_probs)
knn_auc = roc_auc_score(y_train, y_train_knn_probs)
# Plot the ROC curve
plt.plot(rf_fpr, rf_tpr, label=f"Random Forest (AUC = {rf_auc:.2f})")
plt.plot(knn_fpr, knn_tpr, label=f"KNN (AUC = {knn_auc:.2f})")
plt.plot([0, 1], [0, 1], 'k--') # Diagonal line for random classifier
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve - Train Set')
plt.legend(loc='lower right')
plt.show()
Этот код генерирует случайные данные с 10 функциями и 1000 выборками. Затем он стандартизирует функции, разбивает данные на обучающие и тестовые наборы, подбирает обучающий набор с использованием случайного леса и классификаторов KNN, прогнозирует вероятности для положительного класса, вычисляет ROC-кривую и показатель AUC для каждого классификатора и, наконец, строит график для тренировочного набора.
И если мы запустим сгенерированный выше код, мы получим:
И снова у нас есть прямой рабочий процесс, который использует все необходимые нам библиотеки, выводя нужные нам результаты без «дополнительных манипуляций».
Выводы
В этой статье мы рассмотрели 5 основных функций, которые делают sklearn
идеальной библиотекой для машинного обучения. Как мы видели на примерах, рабочий процесс чистый и прямой, что позволяет нам проводить анализ без дополнительных манипуляций.
В то время как некоторые другие библиотеки растут в нашей области для машинного обучения (например, PyCaret
, которая так или иначе, является библиотекой с низким кодом), в sklearn
, безусловно, есть всё, что нам нужно для разработки наших алгоритмов без стресса.