Набор инструментов Data Scientist: гайд по использованию основных функций sklearn с примерами кода.

Набор инструментов Data Scientist: использование основных функций sklearn для достижения успеха

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

Являетесь ли вы практиком машинного обучения или новичком, я знаю, что у вас есть некоторый опыт в sklearn. Но иногда мы используем какие-то инструменты просто потому, что так делают все, не задавая никаких вопросов.

Например, вы когда-нибудь спрашивали себя: «Каковы 5 самых важных особенностей sklearn?» Что ж, позвольте мне сказать вам одну вещь: мне потребовалось около 2 лет, чтобы задать себе этот вопрос, так что не стыдитесь, если вы этого не сделали.

Итак, в этой статье я отвечу на этот вопрос; и вот что вы найдете здесь:

Содержание:

Особенность №1: Простота использования
Особенность №2: Широкий спектр алгоритмов
Особенность №3: Предварительная обработка данных и конструирование признаков
Особенность №4: Оценка и проверка модели
Особенность №5: Интеграция с экосистемой Python для обработки данных
Примеры написания кода

Особенность № 1: Простота использования

Простота sklearn опирается на тот факт, что это непротиворечивая библиотека. Что это значит? Ну, это означает, что она имеет:

  1. Простую интеграцию с внешними библиотеками DL/ML. Её можно интегрировать с внешними библиотеками ML/DL, такими как Keras, Tensorflow и XGBoost. Эта совместимость даёт нам возможность комбинировать функции sklearn с функциями этих библиотек, что делает фазу разработки для нас, специалистов по данным, лёгкой и безболезненной.
  2. Простоту использования. sklearn поддерживает один и тот же унифицированный интерфейс для различных алгоритмов машинного обучения, которые она предоставляет. Таким образом, нам не нужно изучать новый синтаксис или шаблоны: нам просто нужно придерживаться «тех же правил» и думать о разработке наших алгоритмов машинного обучения. Можете ли вы представить себе работу с разным синтаксисом для разных алгоритмов при решении сложных задач машинного обучения? Я нет!
  3. Хорошую документацию. sklearn предоставляет обширную документацию, включая учебные пособия и примеры использования. Документация также охватывает все аспекты библиотеки, от предварительной обработки данных до оценки модели. Вы можете обратиться к ней здесь .

Особенность № 2: Широкий спектр алгоритмов

Библиотека sklearn предоставляет очень широкий спектр алгоритмов машинного обучения, от обучения с учителем до обучения без учителя, реализуя как модели регрессии, так и модели классификации для случаев SL.

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

Нам просто нужно выбрать наиболее подходящий алгоритм для нашей конкретной предметной области, не жалуясь на интеграции и тому подобное: большое преимущество, я считаю!

Особенность № 3: Предварительная обработка данных и конструирование признаков

Предварительная обработка данных и конструирование признаков являются важными частями проблемы ML, поскольку они включают подготовку данных для алгоритмов ML. Вот функции, предоставляемые sklearn для этих задач:

Предварительная обработка данных

  1. Работа с отсутствующими данными . Если вы какое-то время практиковали машинное обучение, я уверен, что вы считаете работу с отсутствующими данными болезненной. Или, по крайней мере, только у меня есть такие чувства. sklearn дает нам различные возможности для работы с отсутствующими данными, например: класс SimpleImputer(), который позволяет нам вменять пропущенные значения, используя различные стратегии, такие как среднее значение, медиана, мода или постоянное значение. Импутация может применяться к определённым столбцам или ко всему набору данных. б) класс IterativeImputer(), который использует модели ML для итеративного определения пропущенных значений. Он заполняет пропущенные значения, используя прогнозы выбранной модели. в) класс MissingIndicator(), который можно использовать для создания двоичных индикаторов отсутствующих значений в наборе данных. Он добавляет новую функцию, которая отмечает, отсутствовало ли значение изначально или нет, предоставляя модели дополнительную информацию.
  2. Масштабирование характеристик . Функции с разными масштабами могут плохо повлиять на производительность многих алгоритмов машинного обучения. К счастью для нас, sklearn предлагает некоторые методы масштабирования функций, такие как: а) стандартизация ( StandardScaler()), которая масштабирует признаки, чтобы иметь нулевое среднее значение и единичную дисперсию, и б) нормализация ( MinMaxScaler()), которая масштабирует функции до определённого диапазона.
  3. Кодирование категориальных переменных . Многие алгоритмы ML не могут напрямую обрабатывать категориальные переменные. По этой причине, sklearn предоставляет несколько методов кодирования, таких как: a) однократное кодирование ( OneHotEncoder()) и б) порядковое кодирование ( OrdinalEncoder()) для преобразования категориальных переменных в числовые представления. Это позволяет легко работать с данными в виде строк и преобразовывать их в числа, чтобы мы могли передавать их алгоритмам ML.
  4. Обработка выбросов . Выбросы — ещё одна общая проблема для специалистов по данным, поскольку они влияют на производительность моделей машинного обучения, поэтому они нуждаются в особом подходе. sklearn предлагает некоторые методы обнаружения и удаления выбросов, такие как фактор локального выброса ( LOF()) и алгоритм Изолирующего леса ( IsolationForest()).

Конструирование признаков

  1. Извлечение признаков. sklearn предоставляет различные методы для извлечения значимых признаков из наших данных. Как мы знаем, на самом деле не все функции, которые у нас есть, имеют значение для наших задач машинного обучения. В случае выделения признаков sklearn обеспечивает: а) класс CountVectorizer(), который может преобразовывать текстовые документы в матрицу количества токенов, и б) класс TfidfVectorizer(), который вычисляет частоту термина, обратную частоте документа (TF-IDF), для представления текстовых данных.
  2. Уменьшение размерности. sklearn предлагает различные методы уменьшения размерности, которые полезны для уменьшения количества функций при сохранении важной информации. Двумя популярными методами являются: а) анализ главных компонентов ( PCA()) и b) t-распределенное стохастическое встраивание соседей ( TSNE()).
  3. Выбор признаков. sklearn предоставляет также несколько методов выбора признаков, таких как: а) одномерный выбор признаков ( SelectKBest()), б) рекурсивное исключение признаков ( RFE()) и c) ранжирование важности признаков на основе древовидных моделей ( SelectFromModel()).

Особенность № 4: Оценка и проверка модели

Оценка и проверка модели являются важными действиями в ML. На самом деле наша роль как специалистов по данным состоит в том, чтобы найти лучшую модель, которая соответствует данным; но что это на самом деле означает?

Это означает, что нам нужно обучить некоторые модели машинного обучения и найти ту, которая даёт наилучшие прогнозы (или классификации) на основе невидимых данных. Это означает, что нам сначала нужно оценить некоторые модели машинного обучения на обучающих данных, а затем проверить их на новых данных. sklearn предоставляет различные функции, которые помогут нам в решении таких фундаментальных задач, как:

  1. Методы перекрёстной проверки. Перекрёстная проверка — важный метод оценки модели, который помогает нам справиться с переоснащением. Он работает путём разделения данных на несколько подмножеств, обучения модели на различных комбинациях этих подмножеств и усреднения результатов для оценки производительности модели. sklearn предоставляет нам следующие методы перекрёстной проверки: а) k-кратная перекрестная проверка, б) стратифицированная k-кратная перекрестная проверка и в) перекрестная проверка с исключением одного.
  2. Метрики оценки. sklearn предлагает широкий спектр показателей оценки, которые позволяют нам количественно оценить эффективность моделей классификации и регрессии. Для задач классификации мы можем назвать, среди прочего, такие показатели, как accuracy, precision, recall и AUC/ROC. Вместо этого можно оценить задачи регрессии, используя такие показатели, как среднеквадратическая ошибка ( MSE), средняя абсолютная ошибка ( MAE), R² и другие.
  3. Настройка гиперпараметров. Оценка и проверка модели тесно связаны с настройкой гиперпараметров, которая включает в себя выбор наилучшей комбинации параметров модели для получения оптимальной производительности алгоритма машинного обучения. sklearn предоставляет такие инструменты, как GridSearchCV и RandomizedSearchCV для настройки гиперпараметров с использованием перекрёстной проверки. Эти методы систематически исследуют пространство гиперпараметров и определяют наилучший набор гиперпараметров, обеспечивающих наилучшую производительность модели, на основе выбранной метрики оценки.

Особенность № 5: Интеграция с экосистемой Python для обработки данных

Одна из сверхспособностей sklearn — это интеграция с экосистемой Python для Data Science. Она позволяет специалистам по данным использовать всю мощь sklearn с библиотеками и инструментами для обработки данных, визуализации и анализа. Вот несколько примеров:

  1. Pandas и Numpy. Возможность интеграции sklearn с фреймами данных Pandas позволяет пользователям передавать фреймы данных непосредственно в функции и классы sklearn. Это делает удобным предварительную обработку и очистку данных с помощью Pandas перед вводом данных в модели sklearn. sklearn также сильно зависит от массивов для представления данных NumPy. На самом деле, она может напрямую принимать массивы NumPy в качестве входных данных для обучающих задач.
  2. 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 для каждого классификатора и, наконец, строит график для тренировочного набора.

И если мы запустим сгенерированный выше код, мы получим:

Набор инструментов Data Scientist: гайд по использованию основных функций sklearn с примерами кода.

И снова у нас есть прямой рабочий процесс, который использует все необходимые нам библиотеки, выводя нужные нам результаты без «дополнительных манипуляций».

Выводы

В этой статье мы рассмотрели 5 основных функций, которые делают sklearn идеальной библиотекой для машинного обучения. Как мы видели на примерах, рабочий процесс чистый и прямой, что позволяет нам проводить анализ без дополнительных манипуляций.

В то время как некоторые другие библиотеки растут в нашей области для машинного обучения (например, PyCaret, которая так или иначе, является библиотекой с низким кодом), в sklearn, безусловно, есть всё, что нам нужно для разработки наших алгоритмов без стресса.

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *