【发布时间】:2020-09-04 08:01:43
【问题描述】:
我正在尝试制作一个字典,其中包含我的机器学习模型的预测结果。我希望有人对如何更快地创建这本字典有任何建议吗?
字典的格式如下:
{'modelVersion': 2,
'predictionDate': '2020-03-09',
'users':
[
userId: 1111
predictionScore: 0.72
features:{
"feature1":{
value:1
shap:2
},
"feature2":{
value:2
shap:3
},
...
},
],
[
userId: 2222
predictionScore: 0.72
features:{
"feature1":{
value:1
shap:2
},
"feature2":{
value:2
shap:3
},
...
},
],
...
]
}
这是我目前的代码,但它太慢了。有人对这段代码如何更快有任何建议吗?我有 70 个功能和 500000 个用户,因此 payload["users"] 将包含 500000 个用户字典的列表,其中每个字典都有 70 个功能。
payload = {}
payload["modelVersion"] = 2
payload["predictionDate"] = "2020-03-09"
users = [None] * len(userIds) #userIds is a list of userIds
featureNames = x_data.columns.tolist() #x_data is a pandas dataframe with features for each user
for i, userId in enumerate(userIds):
shapValues = shap_values_XGB[i].tolist() #List of shap values for user
featureValues = x_data.iloc[i].tolist() #List of feature values for user
features = pd.DataFrame(
{"features": featureNames, "shap": shapValues, "value": featureValues})
features = features.set_index('features').T.to_dict()
user = {
"userId": userId,
"predictionScore": Y_prob[i].item(),
"features": features
}
users[i] = user
payload["users"] = users
【问题讨论】:
-
看到您正在使用 ` features = pd.DataFrame(`
{"features": featureNames, "shap": shapValues, "value": featureValues})在此处创建数据名将功能名称存储在列表中,而不是pandas dataframe -
谢谢,它使删除 pandas 数据帧的速度提高了 20 倍
标签: python-3.x pandas performance dictionary machine-learning