Wpis z mikrobloga

Mireczki, możecie pomóc albo naprostować ( ͡° ͜ʖ ͡°) w rozumieniu następujących kawałków kodu?

1.)

from sklearn.modelselection import traintestsplit
X-train, X-tesy, y-train, y-test = train-test-split(X, y, test_size =0,25, stratify = y)

- stratify = y oznacza, że metoda train-test-split zwróci y-train i y-test z taką samą ilością wierszy
- jak wygląda sprawa z ilością wierszy w X-train porównując z resztą zestawów?

2.)

Chcę zbudować sieć CNN, która ma klasyfikować obrazy (10 klas obrazów), ostatnia warstwa powinna wyglądać jak poniższa?

tf.keras.layers.Conv2D(64, (3,3), padding=valid', activation=tf.nn.relu)

#programowanie #machinelearning #python
  • 5
@braetk: z tą stratyfikacją chodzi chyba bardziej o to, że przy podziale danych funkcja rozdzieli je proporcjonalnie do ilości elementów w poszczególnych klasach. Jakby funkcja je tylko losowała a np jednej klasy było znacznie więcej od pozostałych, to powstaje ryzyko, że do trenowania albo testów wyrzuci tylko elementy z tej jednej klasy i model później nie będzie w stanie poprawnie sklasyfikować pozostałych.
Tutaj masz sytuację że X-train będzie miał około 75%
Tak jak napisał @xavhowk stratify to podzielenie zbioru w tym przypadku 75/25 (test_size) tak aby rozkład wartości zmiennej y był taki sam. W takim przypadku zakładasz niejako że 'w przyszłości' nowe dane również będą miały taki sam rozkład jak Twoje dane treningowe i testowe. Rozkład ze względu na y ma sens jeśli Twoje zmienne kategoryczne są 'zaburzone' tzn. jeśli mamy klasyfikację binarną 0/1 gdzie występuje 90% wartości 0 to dzielenie randomowe może