Open janmalyy opened 1 day ago
hm... a taky bych upravil to, jak dělíš data na trénovací a testovací.
máš tam X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)
, což je fajn default funkce, ale my chceme trénovat na datech z roku 2017-2022, testovat při vyvíjení, tedy teď, na datech z roku 2023 a na data z roku 2024 zatím ještě vůbec nešahat. ty tam používáš všechny dohromady...
já jsem to dělil takto:
def split_train_val_test(dataframe):
"""
Splits the PaRo dataset based on years.
Train data are from 2017 to 2022, validation data are from 2023 and test data are from 2024
@returns: train, val, test dataset in this order
"""
return dataframe[(dataframe["year"] != 2023) & (dataframe["year"] != 2024)], dataframe[dataframe["year"] == 2023], dataframe[dataframe["year"] == 2024]
a pak teda ještě balancuju ten dataset takto
def balance_dataset(dataset: pd.DataFrame) -> pd.DataFrame:
"""
Balance the dataset by randomly under-sampling class 1 to ensure each class has an equal amount of data.
"""
only_1 = dataset[dataset["status"] == 1]
sample_size = len(dataset[dataset["status"] == 0])
random_same_length_only_1 = only_1.sample(n=sample_size)
return pd.concat([random_same_length_only_1, dataset[dataset["status"] == 0]])
nebo místo tohoto undersamplování můžeš použít při tom grid search scoring=f1-score
, tak nějak, prostě jiný než accuracy
Technická poznámka:
Pokud byste chtěli současně mít možnost komentovat přímo do kódu a nekopírovat to, lze dočasně otevřít si novou větev z historického commitu (git log vám ukáže historii commitů, git checkout commitId vás na něj přepne, git checkout -b comparison_branch vám vytvoří historickou verzi, a pak git push a pull request z masteru/jiné větve do této větve vám ukáže rozdíly, které jdou komentovat).
Ahoj, zkouším, jak funguje tahle funkce. Jestli to chápu dobře, nedá se komentovat kód, kterej není označený jako pull request, takže to udělám přes tyhle Issues.
Chtěl jsem si spustit ten kód, ale je tam error. Mohl bych to opravit, ale nechci ti do toho šahat, nevím, kterou variantu jsi chtěl. Jde o to, že
pd.get_dummies
spadne s KeyError, protože vybíráš sloupce, které v tom dataframu nejsou. Buď je potřeba vybírat ty s názvem končícím _codes, nebo do dataframu features přidat i ty původní.