Какую модель ML вы используете? Древовидные модели (такие как повышение градиента и случайные леса) имеют измерение «Важность объекта», которое можно использовать для этого. Вы можете приспособить свою модель к каждой функции, отметьте clf.feature_importances_
и попробуйте удалить модели с более низкими показателями.
Вы можете проверить документацию здесь: здесь
Другой вариант - следовать тому, что сказал @Matt, и использовать что-то вроде рекурсивного исключения функций Вот простой пример :
from sklearn.feature_selection import RFE
rfe = RFE(estimator=svc, n_features_to_select=1, step=1)
rfe.fit(X, y)
ranking = rfe.ranking_
Последний, более простой подход заключается в удалении объектов со слишком низкой дисперсией. Интуиция здесь заключается в том, что, как правило, функции с низкой дисперсией мало что помогут вашей модели различить классы. Вы должны установить порог того, насколько высокой должна быть дисперсия, чтобы сохранить ее в наборе данных. Это , как вы делаете это с помощью sklearn:
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]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
sel.fit_transform(X)
Обратите внимание, что эти примеры взяты из руководства sklearn по выбору функций.