Как мне перебрать оценки? - PullRequest
       6

Как мне перебрать оценки?

3 голосов
/ 29 октября 2019

Учитывая оценку ансамбля , я бы хотел перебрать содержимое его поля estimators_.

Проблема в том, что поле может иметь очень другая структура.

Например, для GradientBoostingClassifier это ранг-2 numpy.ndarray (поэтому я могу использовать nditer), а дляRandomForestClassifier это просто list.

Могу ли я сделать лучше, чем это:

import numpy as np
def iter_estimators(estimators):
    if isinstance(estimators, np.ndarray):
        return map(lambda x: x[()], np.nditer(estimators, flags=["refs_ok"]))
    return iter(estimators)

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Полагаю, вы могли бы использовать np.asarray, чтобы удобно убедиться, что объект является ndarray. Затем используйте ndarray.flat, чтобы получить итератор для уплощенного массива.

>>> estimators = model.estimators_
>>> array = np.asarray(estimators)
>>> iterator = array.flat
>>> iterator
<numpy.flatiter at 0x7f84f48f8e00>
0 голосов
/ 04 ноября 2019

A numpy -агностическое решение равно

def iter_nested(obj):
    """Iterate over all iterable sub-objects.
    https://stackoverflow.com/q/58615038/850781"""
    try:
        for o1 in obj:
            for o2 in iter_nested(o1):
                yield o2
    except TypeError:           # ... object is not iterable
        yield obj

См. Также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...