Выбор признаков с использованием Scikit-Learn

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Выбор признаков - это важный этап в машинном обучении. Он заключается в выборе наиболее релевантных признаков из набора данных для повышения точности и производительности модели. В scikit-learn модуль sklearn.feature_selection предоставляет различные методы для выбора признаков и уменьшения размерности.

В этом лабе мы проведем вас через процесс выбора признаков с использованием scikit-learn. Мы рассмотрим такие техники, как удаление признаков с низкой дисперсией, выбор признаков с использованием одномерных статистик, рекурсивное исключение признаков и выбор признаков с использованием SelectFromModel.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-71110{{"Выбор признаков с использованием Scikit-Learn"}} sklearn/svm -.-> lab-71110{{"Выбор признаков с использованием Scikit-Learn"}} sklearn/feature_selection -.-> lab-71110{{"Выбор признаков с использованием Scikit-Learn"}} sklearn/datasets -.-> lab-71110{{"Выбор признаков с использованием Scikit-Learn"}} ml/sklearn -.-> lab-71110{{"Выбор признаков с использованием Scikit-Learn"}} end

Удаление признаков с низкой дисперсией

В scikit-learn класс VarianceThreshold можно использовать для удаления признаков с низкой дисперсией. Признаки с низкой дисперсией обычно не дают много информации для модели. Мы покажем, как использовать VarianceThreshold для удаления признаков с нулевой дисперсией.

from sklearn.feature_selection import VarianceThreshold

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]

## Initialize VarianceThreshold with a threshold of 80% variability
sel = VarianceThreshold(threshold=(.8 * (1 -.8)))

## Select features with high variability
X_selected = sel.fit_transform(X)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", sel.get_support(indices=True))

Этот код демонстрирует, как использовать VarianceThreshold для удаления признаков с нулевой дисперсией из набора данных. Вывод покажет исходную форму набора данных и форму после выбора признаков с высокой дисперсией.

Выбор признаков с использованием одномерных статистик

Выбор признаков с использованием одномерных статистик заключается в выборе наилучших признаков на основе одномерных статистических тестов. В scikit-learn есть несколько классов, которые реализуют выбор признаков с использованием одномерных статистик:

  • SelectKBest: выбирает топ-k признаков с наивысшими оценками
  • SelectPercentile: выбирает заданный пользователем процент признаков с наивысшими оценками
  • SelectFpr: выбирает признаки на основе уровня ложноположительных результатов (false positive rate)
  • SelectFdr: выбирает признаки на основе уровня ложных обнаружений (false discovery rate)
  • SelectFwe: выбирает признаки на основе семейного уровня ошибок (family wise error)
  • GenericUnivariateSelect: позволяет выбирать признаки с конфигурируемой стратегией

Вот пример использования SelectKBest для выбора двух наилучших признаков из набора данных Iris:

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif

## Load the Iris dataset
X, y = load_iris(return_X_y=True)

## Initialize SelectKBest with the f_classif scoring function and k=2
selector = SelectKBest(f_classif, k=2)

## Select the best features
X_selected = selector.fit_transform(X, y)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", selector.get_support(indices=True))

В этом примере мы используем функцию оценки f_classif и выбираем два наилучших признака из набора данных Iris. Вывод покажет исходную форму набора данных и форму после выбора наилучших признаков.

Рекурсивное исключение признаков

Рекурсивное исключение признаков (Recursive Feature Elimination, RFE) - это метод выбора признаков, который последовательно рассматривает все более мелкие наборы признаков для выбора наиболее важных. Он работает путём обучения внешнего оценивателя с весами, присвоенными признакам, и удалением наименее важных признаков.

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE

## Load the Iris dataset
X, y = load_iris(return_X_y=True)

## Initialize SVC as the external estimator
estimator = SVC(kernel="linear")

## Initialize RFE with the external estimator and select 2 features
selector = RFE(estimator, n_features_to_select=2)

## Select the best features
X_selected = selector.fit_transform(X, y)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", selector.get_support(indices=True))

В этом примере мы используем классификатор на основе векторов опор (Support Vector Classifier, SVC) в качестве внешнего оценивателя и выбираем два наилучших признака из набора данных Iris. Вывод покажет исходную форму набора данных и форму после выбора наилучших признаков.

Выбор признаков с использованием SelectFromModel

Класс SelectFromModel - это мета-трансформер, который можно использовать с любым оценивателем, который назначает важность каждому признаку. Он выбирает признаки на основе их важности и удаляет признаки, значения которых ниже заданного порога.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel

## Load the Iris dataset
X, y = load_iris(return_X_y=True)

## Initialize RandomForestClassifier as the estimator
estimator = RandomForestClassifier()

## Initialize SelectFromModel with the estimator and threshold of "mean"
selector = SelectFromModel(estimator, threshold="mean")

## Select the best features
X_selected = selector.fit_transform(X, y)

print("Original X shape:", X.shape)
print("X with selected features shape:", X_selected.shape)
print("Selected features:", selector.get_support(indices=True))

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

Обзор

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