Пропускать строки при выполнении операции .sum () с использованием numpy - PullRequest
0 голосов
/ 27 марта 2019

Я начал внедрять многокомпонентный наивный байесовский анализ со следующим кадром данных:

   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.

...