Я использую довольно простую классификацию Keras, основанную на 30 функциях. Пока я не могу понять, почему функция потерь становится более изменчивой, если я увеличиваю число строк, входящих в модель:
df = pd.read_csv("cancer_classification.csv")
df = df.iloc[:50]
# split data
X = df.drop("benign_0__mal_1", axis=1).values
y = df["benign_0__mal_1"].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.50, random_state=101)
# scale
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit_transform(X_train)
scaler.transform(X_test)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
print(X_train.shape)
# ---> (50, 30)
model = Sequential()
model.add(Dense(30, activation="relu"))
model.add(Dense(15, activation="relu"))
model.add(Dense(5, activation="relu"))
# binary classification - so last layer has sigmoid activation function
model.add(Dense(1, activation="sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="adam")
# we will overfit to show how it looks like - so 1000 epochs
model.fit(X_train, y_train, epochs=1000, validation_data=(X_test, y_test))
# plotting it out - we leave out first 10 rows so we dont skew chart too much with high loss number on the beginning
loss_df = pd.DataFrame(model.history.history)
loss_df = loss_df.iloc[10:]
loss_df.plot()
plt.show()
Первоначальная идея заключалась в том, чтобы визуализировать переобучение, когда потери продолжают падать, а val_loss начинает расти. Интересно, почему размещение 500 строк создает такие дикие колебания в функциях потерь.
50 df строк
500 df строк