Как лучше всего использовать селектор функций 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 ... to-evaluat
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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