2017-02-15 11 views
1

Я следую примерам от here и here, и я совершенно новый для Keras. Это выглядит потрясающе - но я сталкиваюсь с чем-то, чего не понимаю.Keras: классификация по многоклассам

У меня есть проблема классификации по 8 классам. Мой набор для обучения содержит 5120 строк и 62 столбца, последний столбец - целевая переменная.

Моя целевая переменная в настоящее время кодируется как float, поэтому я конвертирую их в целое, а затем в фиктивную матрицу для модели, используя to_categorical. В результате получается numpy.ndarray формы (num_samples, num_classes + 1). Кто-нибудь знает, почему?

Вот код:

import numpy as np 
from keras.utils.np_utils import to_categorical 

dataset = np.loadtxt("train_pl.csv", delimiter=",") 

# split into input (X) and output (Y) variables 
X = dataset[:,0:61] #I have 5120 rows. 
Y = (dataset[:,62]).astype(int) #class labels 1 to 8 inclusive 

#print Y.shape #(5120,) 
#print np.unique(Y) #1 2 3 4 5 6 7 8 

y_binary = to_categorical(Y) 

print y_binary.shape #(5120, 9) - why does this have 9 columns? 

EDIT

Причина я не понял, что ответил мне было не понять, что Keras буквально интерпретации класса метки в виде чисел. Например, поскольку мои классы помечены с 1 по 8, Keras смотрит на метку «1» и говорит: «Это 1 - я поставлю ее в« 1 »позицию в горячем векторе, например: 0 1 0 0 0 0 0 0 0. Он делает то же самое с «2»: 0 0 1 0 0 0 0 0 0, до 8. Вот почему есть лишний столбец: иметь дело с «0-м» случаем, t существует в отображении. Технически принятый ответ объясняет, что это просто дает более подробную информацию.

ответ

0

Поскольку to_categorical преобразует класса вектор (целые числа от 0 к nb_classes) к матрице двоичного класса, для использования с categorical_crossentropy, как описано в here.

+0

В учебнике [здесь] (http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/), хотя при определении модели автор имеет 3 единицы вывода, которые такая же размерность, как и для статистического результата. Я не могу этого сделать - у меня не может быть 9 классов в моем выпуске. – StatsSorceress

+0

вы можете попробовать сопоставить метки (y) с 0..7 с помощью 'Y = Y - 1' перед тренировкой. Как только вы прогнозируете, верните их обратно –

+0

Почему это необходимо? Учебник имеет 3 выходных узла и 3 класса, определенные в to_categorical .... – StatsSorceress