Как лучше всего использовать селектор функций sklearn в поиске по сетке, чтобы оценить полезность всех функций?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как лучше всего использовать селектор функций sklearn в поиске по сетке, чтобы оценить полезность всех функций?

Сообщение Anonymous »

Я обучаю классификатор sklearn и вставляю в конвейер этап выбора признаков. С помощью поиска по сетке я хотел бы определить, какое количество функций позволяет мне максимизировать производительность. Тем не менее, я хотел бы изучить с помощью поиска по сетке возможность того, что отсутствие выбора функций, а только «сквозной» шаг, является оптимальным выбором для максимизации производительности.
Вот воспроизводимый пример:

Код: Выделить всё

import seaborn as sns
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer

# Load the Titanic dataset
titanic = sns.load_dataset('titanic')

# Select features and target
features = ['age', 'fare', 'sex']
X = titanic[features]
y = titanic['survived']

# Preprocessing pipelines for numeric and categorical features
numeric_features = ['age', 'fare']
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant')),
('scaler', StandardScaler())
])

categorical_features = ['sex']
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant')),
('onehot', OneHotEncoder(drop='first'))
])

# Combine preprocessing steps
preprocessor = ColumnTransformer(transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)
])

# Initialize classifier and feature selector
clf = LogisticRegression(max_iter=1000, solver='liblinear')
sfs = SequentialFeatureSelector(clf, direction='forward')

# Create a pipeline that includes preprocessing, feature selection, and classification
pipeline = Pipeline(steps=[
('preprocessor', preprocessor),
('feature_selection', sfs),
('classifier', clf)
])

# Define the parameter grid to search over
param_grid = {
'feature_selection__n_features_to_select': [2],
'classifier__C': [0.1, 1.0, 10.0],  # Regularization strength
}

# Create and run the grid search
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X, y)

# Output the best parameters and score
print("Best parameters found:", grid_search.best_params_)
print("Best cross-validation score:", grid_search.best_score_)
здесь есть три функции (даже после этапа препроцессора), но приведенный выше код поиска по сетке не позволяет исследовать модели, в которых используются все 3 функции, как установлено

Код: Выделить всё

 feature_selection__n_features_to_select: [2,3]
выдаст ValueError: n_features_to_select должно быть < n_features.
Проблема здесь в том, что SequentialFeatureSelector этого не делает. рассматривать выбор всех функций (так называемый сквозной селектор) как допустимый выбор функций.
Другими словами, я хотел бы запустить поиск по сетке, который также учитывает настройку

Код: Выделить всё

('feature_selection', 'passthrough')
в пространстве возможных конфигураций конвейера. Есть ли идиоматический/хороший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/793 ... h-to-evalu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»