Pythoni c способ доступа к данным из кортежа? - PullRequest
1 голос
/ 28 мая 2020

Я работаю с функцией sklearn partial_dependency . Мне известна функция plot_partial_dependency, но мне не интересно ее использовать.

Я хочу для каждой функции в моем наборе данных определить среднюю зависимость для создания набора функций и их средней зависимости. У меня есть возможность сделать это, но, честно говоря, решение довольно подробное в отношении того, как я получаю доступ к tuple, возвращаемому из partial_dependency. Есть ли другой c способ получить average первого ndarray, возвращенного в кортеже?

Код ниже:

feature_dict = {}

for feature in X_test.columns:
    results = partial_dependence(mlp, X_test, features=feature, 
                                percentiles=(0.001, 0.999), grid_resolution=25)
    lists = [x for x in results]
    yx = lists[0]
    y=yx[0]
    feature_dict[feature] = np.avg(y)

Это работает, как если бы я print(feature_dict) Я получаю:

{'Feature0': 0.8403025353927007, 'Feature1': 0.7832550769883906, 'Feature2': 0.8396910956294878, 'Feature3': 0.6738822611060408, 'Feature4': 0.45209427548019937}

Однако код не является pythoni c и представляет собой запутанный способ доступа к кортежу, выпущенному функцией partial_dependence. Что я могу сделать для более простого решения?

1 Ответ

1 голос
/ 28 мая 2020

"... это запутанный способ доступа к кортежу, освобожденному функцией partial_dependence."

Если results является кортежем, тогда [x for x in results] может быть просто results = list(results). Но доступ к элементам списка можно получить по индексу, как к кортежам. Поэтому нет необходимости сначала преобразовывать его в кортеж.

Затем вы выполняете yx = lists[0], которое относится к первой части возвращаемого значения partial_dependence(). Это averaged_predictions. Таким образом, эта строка могла быть просто yx = results.averaged_predictions.

Затем y=yx[0], который является первым элементом первой части возвращаемого значения partial_dependence. Это будет y = results.averaged_predictions[0].

Собирая все это вместе, код становится:

feature_dict = {}

for feature in X_test.columns:
    results = partial_dependence(mlp, X_test, features=feature, 
                                 percentiles=(0.001, 0.999), grid_resolution=25)
    y = results.averaged_predictions[0]
    feature_dict[feature] = np.avg(y)

И если вы не обрабатываете y дальше, его не нужно назначать отдельно:

for feature in X_test.columns:
    results = partial_dependence(mlp, X_test, features=feature, 
                                 percentiles=(0.001, 0.999), grid_resolution=25)
    feature_dict[feature] = np.avg(results.averaged_predictions[0])

Следующий шаг необязателен и не рекомендуется из-за того, как он выглядит - вы могли бы сделать все это l oop большим, почти нечитаемым пониманием словаря:

feature_dict = {
    feature: np.avg(
                partial_dependence(mlp, X_test,
                                   features=feature, 
                                   percentiles=(0.001, 0.999),
                                   grid_resolution=25
                ).averaged_predictions[0])
    for feature in X_test.columns
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...