欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人工智能 > pytorch >内容正文

pytorch

【深度学习】神经网络模型特征重要性可以查看了!!!

发布时间:2025/3/12 pytorch 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【深度学习】神经网络模型特征重要性可以查看了!!! 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

作者:杰少

查看NN模型特征重要性的技巧

简 介

我们都知道树模型的特征重要性是非常容易绘制出来的,只需要直接调用树模型自带的API即可以得到在树模型中每个特征的重要性,那么对于神经网络我们该如何得到其特征重要性呢?

本篇文章我们就以LSTM为例,来介绍神经网络中模型特征重要性的一种获取方式。

NN模型特征重要性

01

基本思路

该策略的思想来源于:Permutation Feature Importance,我们以特征对于模型最终预测结果的变化来衡量特征的重要性。

02

实现步骤

NN模型特征重要性的获取步骤如下:

  • 训练一个NN;

  • 每次获取一个特征列,然后对其进行随机shuffle,使用模型对其进行预测并得到Loss;

  • 记录每个特征列以及其对应的Loss;

  • 每个Loss就是该特征对应的特征重要性,如果Loss越大,说明该特征对于NN模型越加重要;反之,则越加不重要。

  • Code

    代码摘自:https://www.kaggle.com/cdeotte/lstm-feature-importance/notebook

    import matplotlib.pyplot as plt from tqdm.notebook import tqdmimport tensorflow as tf from tensorflow import keras import tensorflow.keras.backend as K from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint from tensorflow.keras.callbacks import LearningRateScheduler, ReduceLROnPlateau from tensorflow.keras.optimizers.schedules import ExponentialDecay from sklearn.metrics import mean_absolute_error as mae from sklearn.preprocessing import RobustScaler, normalize from sklearn.model_selection import train_test_split, GroupKFold, KFold from IPython.display import displayCOMPUTE_LSTM_IMPORTANCE = 1 ONE_FOLD_ONLY = 1with gpu_strategy.scope():kf = KFold(n_splits=NUM_FOLDS, shuffle=True, random_state=2021)test_preds = []for fold, (train_idx, test_idx) in enumerate(kf.split(train, targets)):K.clear_session()print('-'*15, '>', f'Fold {fold+1}', '<', '-'*15)X_train, X_valid = train[train_idx], train[test_idx]y_train, y_valid = targets[train_idx], targets[test_idx]# 导入已经训练好的模型model = keras.models.load_model('models/XXX.h5')# 计算特征重要性if COMPUTE_LSTM_IMPORTANCE:results = []print(' Computing LSTM feature importance...')for k in tqdm(range(len(COLS))):if k>0: save_col = X_valid[:,:,k-1].copy()np.random.shuffle(X_valid[:,:,k-1])oof_preds = model.predict(X_valid, verbose=0).squeeze() mae = np.mean(np.abs( oof_preds-y_valid ))results.append({'feature':COLS[k],'mae':mae})if k>0: X_valid[:,:,k-1] = save_col# 展示特征重要性print()df = pd.DataFrame(results)df = df.sort_values('mae')plt.figure(figsize=(10,20))plt.barh(np.arange(len(COLS)),df.mae)plt.yticks(np.arange(len(COLS)),df.feature.values)plt.title('LSTM Feature Importance',size=16)plt.ylim((-1,len(COLS)))plt.show()# SAVE LSTM FEATURE IMPORTANCEdf = df.sort_values('mae',ascending=False)df.to_csv(f'lstm_feature_importance_fold_{fold}.csv',index=False)# ONLY DO ONE FOLDif ONE_FOLD_ONLY: break

    适用情况

    适用于所有的NN模型。

    参考文献

  • https://www.kaggle.com/cdeotte/lstm-feature-importance/notebook

  • Permutation Feature Importance

  • 往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑 AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

    本站qq群851320808,加入微信群请扫码:

    总结

    以上是生活随笔为你收集整理的【深度学习】神经网络模型特征重要性可以查看了!!!的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。