Я начал внедрять многокомпонентный наивный байесовский анализ со следующим кадром данных:
Disc Bus Dep Edu
0 1 2 2 1
1 0 1 1 1
2 1 2 1 4
3 0 1 1 1
4 0 2 1 3
Я также разделил его на поезд / тест
X = data_rev.drop('Disc', axis = 1)
y = data_rev['Disc']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 21)
Затем я начинаю вычислять вероятности: 1. Вычислить предыдущую логарифмическую вероятность для каждого класса (используйте np.unique, чтобы вернуть отсортированные уникальные элементы массива)
separated = [[x for x, t in zip(X_train, y_train) if t == c] for c in np.unique(y_train)]
count_sample = X_train.shape[0]
self.class_log_prior_ = [np.log(len(i) / count_sample) for i in separated]
Посчитайте каждое вхождение для каждого класса
count = np.array([np.array(i).sum(axis = 0) for i in separated])
Но почему-то это выдает ошибку, говорящую TypeError: cannot perform reduce with flexible type
.Очевидно, что при передаче axis = 0
numpy обнаруживает строку (заголовки кадра данных) и не может выполнить операцию.Это то, что происходит?Как я могу исправить это в этой count
операции?
Шаг 3 следующий:
feature_log_prob_ = np.log(count / count.sum(axis = 1)[np.newaxis].T)
, который, конечно, выдает ошибку, потому что вызывает count
.