【问题标题】:How can I fill this dictionary faster?我怎样才能更快地填写这本词典?
【发布时间】: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


【解决方案1】:

我换了这个

features = pd.DataFrame({"features": featureNames, "shap": shapValues, "value": featureValues})

features = features.set_index('features').T.to_dict()

用这个:

features = [featureNames, shap, featureValues]
featuresT = list(map(list, zip(*features)))
features = {item[0]: {"shap":item[1:2][0],"value":item[2:3][0]} for item in featuresT}

它让它快了 20 倍 :)

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2021-10-18
    • 2019-12-16
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多