You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:45:38