Введение
Выбор признаков - это важный этап в машинном обучении. Он заключается в выборе наиболее релевантных признаков из набора данных для повышения точности и производительности модели. В scikit-learn модуль sklearn.feature_selection предоставляет различные методы для выбора признаков и уменьшения размерности.
В этом лабе мы проведем вас через процесс выбора признаков с использованием scikit-learn. Мы рассмотрим такие техники, как удаление признаков с низкой дисперсией, выбор признаков с использованием одномерных статистик, рекурсивное исключение признаков и выбор признаков с использованием SelectFromModel.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Удаление признаков с низкой дисперсией
В 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. Эти методы помогают выбрать наиболее значимые признаки и уменьшить размерность набора данных, что приводит к улучшению производительности модели.