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

使用Scikit Learn的SelectKBest调用get_support()时遇numpy.ndarray属性错误

解决SelectKBest调用get_support()时出现的'numpy.ndarray' object has no attribute 'get_support'错误

Hey Jeff, 我来帮你搞定这个问题!你碰到的这个错误其实挺常见的,核心原因是你误把SelectKBest拟合后输出的特征矩阵(numpy数组)当成了SelectKBest的实例对象来调用get_support()方法啦。

为什么会出错?

SelectKBest的工作逻辑是这样的:你得先创建一个SelectKBest实例,然后用fit()或者fit_transform()处理数据。其中fit_transform()会直接返回筛选后的特征矩阵(这是个numpy.ndarray类型),但get_support()是属于SelectKBest实例本身的方法,根本不是这个返回数组的方法——所以直接拿数组调用肯定会报错。

正确的操作步骤&代码示例

你需要保留SelectKBest的实例对象,而不是只取它返回的特征矩阵。看下面的具体代码:

from sklearn.feature_selection import SelectKBest, f_regression
import pandas as pd
import numpy as np

# 模拟一份测试数据集
X = pd.DataFrame({
    'feat1': np.random.rand(100),
    'feat2': np.random.rand(100),
    'feat3': np.random.rand(100),
    'feat4': np.random.rand(100)
})
y = np.random.rand(100)

# 1. 先初始化SelectKBest实例
selector = SelectKBest(f_regression, k=2)
# 2. 拟合数据并得到筛选后的特征矩阵
X_selected = selector.fit_transform(X, y)

# 3. 用selector实例调用get_support(),而不是X_selected
feature_mask = selector.get_support()
# 4. 根据掩码获取对应的特征名称
selected_feature_names = X.columns[feature_mask]

print("筛选出的特征名称:", selected_feature_names)

你可能踩的错误坑(对比参考)

很多人会图省事直接链式调用,结果就踩了这个坑:

# 错误示例:直接把fit_transform的返回值当成实例
X_selected = SelectKBest(f_regression, k=2).fit_transform(X, y)
mask = X_selected.get_support()  # 这里必然报错,因为X_selected是numpy数组

总结一下

关键就是要保留SelectKBest的实例对象,别只拿它输出的特征矩阵。只要你在代码里存好了初始化后的selector实例,就能正常调用get_support()获取特征筛选的掩码,进而轻松拿到对应的特征名称啦。

内容的提问来源于stack exchange,提问作者JeffZheng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:51