Кажется, есть ряд похожих вопросов , но я не смог решить свою проблему.
Существует набор данных с 15 объектами (столбцами) и одним зависимым двоичным объектом, который я хочу предсказать.
Я делаю всю подготовительную работу:
features = df.iloc[:,:-1]
result = df.iloc[:,-1]
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, result, test_size = 0.2, random_state = 0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Проверка размеров X_train и y_train:
X_train.shape
возврат (3392, 15)
И
Y_train.shape
возвращает (3392)
Y_train - это массив: массив ([0, 1, 0, ..., 0, 0, 0])
Затем я строю сеть:
from keras.models import Sequential
from keras.layers import Dense
classifier = Sequential()
classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu', input_dim= X_train[0].shape)) # 8 units because (15 features + 1 to forecast) / 2
# Adding the second hidden layer
classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu'))
# Adding the output layer
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Fitting the ANN to the Training set
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)
И получил сообщение об ошибке:
ValueError: Ошибка при проверке ввода: ожидалось, что dens_1_input имеет shape (11,), но получил массив с shape (15,)
Я не могу понять, почему он ожидает форму 11 (это число нигде не используется в моем коде). В похожих вопросах, размещенных здесь, проблемы обычно возникают из-за неправильного указания размера обучающего набора (например, ноль вместо любого количества функций). Но я ясно передаю правильное число первому слою, написав
input_dim= X_train[0].shape
который я тоже могу написать как
input_dim= 15
с тем же результатом.
Что я делаю не так?
P.S. Я также думал, что проблема была с y_train и сделал это:
y_train = y_train.reshape(3392,1)
но без эффекта.