Python For循环运行缓慢,用于提取所有数据集的形状值
我正在处理一个数据集,在这个数据集中,我需要提取每个预测中最重要的变量。我使用SHAP库来实现这一点 一般来说,对于一个预测,运行时间不到一秒,但问题是,当我为110000个客户端运行它时,运行时间几乎是半天!(我没有检查到最后)在每次运行中,我都希望引入影响目标变量每个方向的最多五个特性。 在这个过程结束时,我应该有一个大约110万条记录的数据集,其中包含预测指数和预测中最重要的变量 以下是数据对象:Python For循环运行缓慢,用于提取所有数据集的形状值,python,pandas,numpy,shap,lime,Python,Pandas,Numpy,Shap,Lime,我正在处理一个数据集,在这个数据集中,我需要提取每个预测中最重要的变量。我使用SHAP库来实现这一点 一般来说,对于一个预测,运行时间不到一秒,但问题是,当我为110000个客户端运行它时,运行时间几乎是半天!(我没有检查到最后)在每次运行中,我都希望引入影响目标变量每个方向的最多五个特性。 在这个过程结束时,我应该有一个大约110万条记录的数据集,其中包含预测指数和预测中最重要的变量 以下是数据对象: var1 var2 var3 ... var_k XX XX XX XX
var1 var2 var3 ... var_k
XX XX XX XX
代码如下:
import shap
explainer = shap.TreeExplainer(xgb_model)
shap_values = explainer.shap_values(data)
appended_data=[]
for i in range(0,data.index.values.max()+1)):
vars()['df_'+str(i)] = pd.DataFrame(shap_values[i]).T
vars()['df_'+str(i)].columns = data.columns
vars()['df_'+str(i)] = pd.concat([vars() \
['df_'+str(i)].T.sort_values(by=0,ascending=False).head(4),vars() \
['df_'+str(i)].T.sort_values(by=0,ascending=True).head(4)])
vars()['df_'+str(i)].columns = ['var_power']
vars()['df_'+str(i)]=vars()['df_'+str(i)].reset_index()
vars()['df_'+str(i)].columns = ['var_name','var_power']
vars()['df_'+str(i)]['num']=i
vars()['df_'+str(i)]=vars()['df_'+str(i)].set_index('num')
vars()['df_'+str(i)].index.name = None
appended_data.append(vars()['df_'+str(i)])
df_final=pd.concat(appended_data)
以下是1个实例的输出示例:
var_name var_power
1 var1 1.5
1 var2 1.0
1 var22 0.5
1 var53 0.4
1 var21 0.3
1 var47 -2.0
1 var90 -1.5
1 var11 -1.0
1 var62 -0.5
1 var82 -0.3
但我需要为11万名客户提供,但这需要很多时间如何优化运行时?