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

如何在Python中用LIME对H2O GBM模型做特征选择并提取Top3重要列

Got it, let's walk through how to use LIME with an H2O GBM model for feature selection and extract the top 3 most significant features. Here's a step-by-step guide with code examples:

Step 1: Install Required Packages

First off, make sure you've got all the necessary libraries installed. Run this command in your terminal:

pip install h2o lime pandas scikit-learn
Step 2: Initialize H2O and Load Your Dataset

Start by firing up the H2O cluster and loading your data. We'll use the Boston Housing dataset (regression task) as an example, but you can swap it with your own dataset easily:

import h2o
import pandas as pd
from sklearn.datasets import load_boston

# Initialize H2O cluster (default settings work for most cases)
h2o.init()

# Load sample data and convert to H2O Frame
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target  # Target variable for house price
h2o_df = h2o.H2OFrame(df)

# Split data into training and test sets
train, test = h2o_df.split_frame(ratios=[0.8], seed=42)

# Define predictor columns and target column
predictors = boston.feature_names.tolist()
target = 'MEDV'
Step 3: Train an H2O GBM Model

Next, train your GBM model using H2O's optimized estimator:

from h2o.estimators.gbm import H2OGradientBoostingEstimator

# Initialize and train the GBM model
gbm_model = H2OGradientBoostingEstimator(
    ntrees=100,
    max_depth=5,
    learn_rate=0.1,
    seed=42
)
gbm_model.train(x=predictors, y=target, training_frame=train)
Step 4: Create a Prediction Function for LIME

LIME needs a function that takes a pandas DataFrame and returns model predictions. Since H2O models work with H2O Frames, we'll wrap the prediction logic to handle the format conversion:

def h2o_predict_fn(data):
    # Convert pandas DataFrame to H2O Frame
    h2o_data = h2o.H2OFrame(data)
    # Get predictions (use predict_proba for classification tasks)
    predictions = gbm_model.predict(h2o_data).as_data_frame()
    # For regression, return predicted values as a numpy array
    return predictions['predict'].values

Note: If you're working on a classification task, replace predict with predict_proba and return the probability array instead.

Step 5: Use LIME to Explain Features and Extract Top 3

We'll cover both local explanations (for a single sample) and global top features (aggregated across multiple samples) to get a complete picture.

Local Explanation (Single Test Sample)

This shows which features drive the prediction for a specific data point:

import lime.lime_tabular

# Initialize LIME explainer
explainer = lime.lime_tabular.LimeTabularExplainer(
    training_data=train.as_data_frame()[predictors].values,
    feature_names=predictors,
    class_names=[target],
    mode='regression'  # Switch to 'classification' for classification tasks
)

# Pick a sample from the test set to explain
sample_idx = 0
sample = test.as_data_frame().iloc[sample_idx][predictors].values.reshape(1, -1)

# Generate explanation for the sample
exp = explainer.explain_instance(
    data_row=sample[0],
    predict_fn=h2o_predict_fn,
    num_features=len(predictors)
)

# Print the top 3 features for this sample
print("Top 3 features for sample {}:".format(sample_idx))
for feature, weight in exp.as_list()[:3]:
    print(f"- {feature}: {weight:.4f}")

# Optional: Visualize the explanation in a notebook
exp.show_in_notebook(show_table=True)

Global Top 3 Features (Aggregated Across Samples)

To find the most impactful features overall, aggregate importance scores across multiple test samples:

import numpy as np

# Initialize a dictionary to track total feature importance
feature_importance = {feat: 0 for feat in predictors}

# Iterate over a subset of test samples (adjust based on your dataset size)
num_samples = 50
for i in range(min(num_samples, test.nrow)):
    sample = test.as_data_frame().iloc[i][predictors].values.reshape(1, -1)
    exp = explainer.explain_instance(
        data_row=sample[0],
        predict_fn=h2o_predict_fn,
        num_features=len(predictors)
    )
    # Add absolute weight (we care about impact magnitude, regardless of direction)
    for feature, weight in exp.as_list():
        feature_importance[feature] += abs(weight)

# Sort features by total importance
sorted_features = sorted(feature_importance.items(), key=lambda x: x[1], reverse=True)

# Print the global top 3 features
print("\nGlobal Top 3 most significant features:")
for rank, (feature, total_weight) in enumerate(sorted_features[:3], 1):
    print(f"{rank}. {feature} (Total absolute importance: {total_weight:.2f})")
Key Notes
  • For classification tasks, update the mode in LimeTabularExplainer to 'classification' and adjust the prediction function to return class probabilities.
  • Using absolute weights in global aggregation accounts for both positive and negative feature impacts—we're measuring how much each feature moves the prediction, regardless of direction.
  • Increase num_samples in the global aggregation for more robust results (just note it will take longer to run).

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:41:35