Python: создание нового двоичного списка на основе некоторого условия между двумя рядами панд - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь сравнить два списка, один из ряда известных значений, а другой - серию предсказаний из классификатора, и создать новый двоичный список на предмет того, были ли два элемента «достаточно близки».

Я буду использовать RMSE в качестве меры пригодности, и если разница между прогнозируемым значением и известным значением меньше, чем, скажем, 1, я хотел бы поставить 1 в этом месте нового списка, и еслиошибка больше 1, верните 0 в этот момент в новом списке.

Например:

y_known = {23,45,67,83}
y_pred = {23,46,64,78}

Должен вернуться

binary_array = [1,1,0,0]

Мне нужно это для расчета кривой точности / отзыва моей обученной системы.Я смотрел на использование лямбда-выражений, но, по-видимому, для такого рода проблем это больше хлопот, чем стоит.Любые предложения будут ценны.

ОБНОВЛЕНИЕ

Это работает безупречно и сделало именно то, что мне было нужно.Оригинальный автор отозвал свой комментарий, но большое спасибо!

def createBinaryArray(x, y, k):
    assert(len(x) == len(y))
    return([1 if abs(a-b)<=k else 0 for a,b in zip(x, y)])

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете использовать

(np.abs(y_known - y_pred) <= 1).astype(int)

С вашим примером ввода:

In [265]: y_known = np.array([23, 45, 67, 83])

In [266]: y_pred = np.array([23, 46, 64, 78])

In [267]: (np.abs(y_known - y_pred) <= 1).astype(int)
Out[267]: array([1, 1, 0, 0])

Редактировать , основываясь на комментариях: тот же подход работает точно так же, еслито, с чего вы начинаете - это серия панд:

In [273]: y_known = pd.Series([23, 45, 67, 83])

In [274]: y_pred = pd.Series([23, 46, 64, 78])

In [278]: ((y_known - y_pred).abs() <= 1).astype(int)
Out[278]:
0    1
1    1
2    0
3    0
dtype: int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...