Что такое простой способ условно объединить массивы? - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть два массива NumPy (1000,), заполненных прогнозами из двух моделей:

pred_1 = model_1.predict(x_test)
pred_2 = model_2.predict(x_test)

model_1 привлекательно из-за чрезвычайно низкого FP, но, следовательно, высокого FN.

model_2 привлекателен благодаря общей точности и отзыву.

Как я могу условно применить прогнозы, чтобы воспользоваться этими сильными и слабыми сторонами?

Я бы хотел взять все положительные (1) прогнозы из первой модели и позволить второй модели справиться с остальными.

По сути, я ищу что-то вроде этого:

final_pred = model_1.predict() if model_1.predict() > 0.5 else model_2.predict()

Это не удалось: значение истинности массива с более чем одним элементом неоднозначно.

Как можно объединить эти массивы как указано выше?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы ищете numpy.where:

a = model_1.predict(x_test)
b = model_2.predict(x_test)

out = np.where(a > 0.5, a, b)
0 голосов
/ 04 ноября 2018

Вы можете попробовать понимание списка следующим образом, а затем преобразовать список в массив, используя np.array. Вы перебираете независимую переменную, здесь x_test, а затем для каждого значения x_test вы вычисляете прогноз модели из двух моделей и в зависимости от условия if сохраняете выходные данные.

final_pred = np.array([model_1.predict(i) if model_1.predict(i) > 0.5 else model_2.predict(i) for i in x_test])

Вы также можете использовать индексирование NumPy как

mask = (pred_1 > 0.5)
pred_2[mask] = pred_1[mask]
final_pred = pred_2

Здесь вы сначала создаете маску, где pred_1 > 0.5, затем используете эти индексы в массиве pred_2 и заменяете эти значения значениями pred_1. В результате pred_2 будет вашим final_pred.

...