Чтобы получить наиболее частое значение из списка или массива, вы можете использовать функцию mode
из scipy.stats
import numpy as np
from scipy.stats import mode
train_Y=[1,7,3,4,6,4]
pop_train_cat_ind=mode(train_Y).mode[0]
print(pop_train_cat_ind)
Функция argmax, которую вы использовали, - это не то, что вы хотели сделать, потому что она не получает наиболее частое значение, а индексы, где train_Y
имеет максимальное значение (при train_Y=[1,7,3,4,6,4]
она вернет 1)
Когда вы вычисляете pop_val_cat_ct
, вы сначала суммируете все элементы в validation_Y
, который возвращает одно число, а затем вы пытаетесь получить pop_val_cat_ct
элемент, которого в общем случае не существует.
Чтобы правильно вычислить pop_val_cat_ct
, вы должны посчитать, сколько раз validation_Y
равно pop_train_cat_ind
и сумма:
validation_Y=[1,8,4]
# get the count of that same category in your validation ouputs
pop_val_cat_ct = np.sum(validation_Y==pop_train_cat_ind)
validation_Y==pop_train_cat_ind
дает массив той же длины, что и validation_Y
, заполненный True или False. Когда вы его суммируете, он возвращает количество значений True (для Python True = 1 и False = 0), поэтому вам нужно количество.
Затем вы можете сделать, как вы написали
# get the percentage compared to your total validation samples
baseline = pop_val_cat_ct / len(validation_Y)