mlxtend SequentialFeatureSelector运行时keepdims警告消除方法咨询
解决方法
一、消除重复的FutureWarning
这个警告来自scikit-learn的KNeighborsClassifier内部调用scipy的stats.mode时未指定keepdims参数,以下是三种可行处理方式:
1. 升级scikit-learn到最新稳定版
该问题在scikit-learn 1.2及以上版本中已被修复,直接升级即可彻底消除警告:
pip install --upgrade scikit-learn
2. 临时屏蔽特定警告
如果暂时不想升级,可使用Python的warnings模块精准过滤该警告,在代码开头添加:
import warnings # 过滤指定的FutureWarning warnings.filterwarnings("ignore", message="Unlike other reduction functions.*keepdims will become False")
也可宽泛地屏蔽sklearn相关的FutureWarning:
warnings.filterwarnings("ignore", category=FutureWarning, module="sklearn")
3. 自定义KNN分类器(进阶)
通过子类化KNeighborsClassifier,重写内部调用stats.mode的逻辑,手动指定keepdims=True:
from sklearn.neighbors import KNeighborsClassifier from scipy import stats import numpy as np class FixedKNN(KNeighborsClassifier): def _predict_proba(self, X): neigh_dist, neigh_ind = self.kneighbors(X) classes_ = self.classes_ _y = self._y if self.weights == 'uniform': mode, _ = stats.mode(_y[neigh_ind], axis=1, keepdims=True) else: weights = self._get_weights(neigh_dist) mode, _ = stats.mode(_y[neigh_ind], axis=1, keepdims=True, weights=weights) mode = mode.ravel() return np.searchsorted(classes_, mode)
之后在SFS中使用这个自定义的FixedKNN()替代原有的KNeighborsClassifier即可。
二、启用并行加速(匹配你期望的输出)
当前SFS默认使用单线程(n_jobs=1),要启用多线程并行,只需在初始化SFS时设置n_jobs=-1,这样会调用所有可用的CPU核心:
sfs = SFS(KNeighborsClassifier(), k_features=10, verbose=2, n_jobs=-1)
运行后就会输出类似你期望的LokyBackend多线程日志。
内容的提问来源于stack exchange,提问作者Edi Sugiarto
相关产品推荐
相关产品推荐

