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

如何利用特征重要性定位「最差」特征并关联对应ID?

波士顿房价数据集特征分析相关问题

本人工作数据涉及保密,故以波士顿房价数据集为例:已通过特征重要性分析找到对因变量MEDV影响最大的自变量RM、LSTAT、DIS。现请教两个问题:

  1. 如何利用训练好的模型找到这三个特征对应的样本ID?
  2. 查看特征重要性图后,是否只需按RM、LSTAT、DIS降序排序DataFrame即可?结合业务场景,这三个特征属于「最差」特征。

提供的代码

from sklearn.datasets import load_boston
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import RFE
from sklearn.linear_model import RidgeCV, LassoCV, Ridge, Lasso
from sklearn.ensemble import RandomForestRegressor

# 加载数据集
x = load_boston()
df = pd.DataFrame(x.data, columns = x.feature_names)
df["MEDV"] = x.target
X = df.drop("MEDV",1)   # 特征矩阵
y = df["MEDV"]                # 目标变量
df.head()

df['id'] = df.groupby(['MEDV']).ngroup()
df = df.sort_values(by=['MEDV'], ascending=True)
df.head(10)

names = df.columns
reg = RandomForestRegressor()
reg.fit(X, y)
print("特征按重要性得分排序:")
print(sorted(zip(map(lambda x: round(x, 4), reg.feature_importances_), names), reverse=True))

features = names
importances = reg.feature_importances_
indices = np.argsort(importances)

plt.title('特征重要性')
plt.barh(range(len(indices)), importances[indices], color='#8f63f4', align='center')
plt.yticks(range(len(indices)), features[indices])
plt.xlabel('相对重要性')
plt.show()

相关图表

特征重要性图1
数据排序图

问题解答

1. 定位三个特征对应的样本ID

样本ID是你通过df['id'] = df.groupby(['MEDV']).ngroup()生成的列,完全不需要依赖训练好的模型就能获取:

  • 若要获取所有样本的ID及对应三个特征值,直接提取列即可:
    id_with_features = df[['id', 'RM', 'LSTAT', 'DIS']]
    
  • 结合「最差」业务场景,若要筛选符合特征极端值的样本ID,可按业务逻辑过滤(比如RM偏小、LSTAT偏大、DIS偏小的样本):
    # 示例:筛选RM低于均值、LSTAT高于均值、DIS低于均值的"最差"样本ID
    bad_samples_ids = df[(df['RM'] < df['RM'].mean()) & 
                         (df['LSTAT'] > df['LSTAT'].mean()) & 
                         (df['DIS'] < df['DIS'].mean())]['id'].tolist()
    

模型仅用于识别特征重要性,样本ID的定位本质是数据筛选,直接操作DataFrame更高效。

2. 关于样本排序的问题

不能直接按三个特征全部降序排序,因为它们对MEDV的影响方向完全不同:

  • RM(平均房间数)与MEDV正相关:RM越大,房价越高;
  • LSTAT(低收入人群占比)与MEDV负相关:LSTAT越大,房价越低;
  • DIS(到就业中心距离)与MEDV正相关:DIS越大,房价越高;

结合「最差」业务场景,应该按RM升序、LSTAT降序、DIS升序排序,这样排在前列的就是符合业务定义的「最差」样本。示例代码:

# 按业务定义的"最差"特征排序
df_sorted = df.sort_values(by=['RM', 'LSTAT', 'DIS'], ascending=[True, False, True])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:50:23