This commit is contained in:
Anna Nowak 2021-05-26 21:08:58 +02:00
parent d7d5047587
commit 0bb7eb7a58
5 changed files with 1149 additions and 7 deletions

3
.gitignore vendored
View File

@ -3,4 +3,5 @@ venv*
.vscode*
__pycache__*
music_genre.csv
music_genre.model
*.model
.ipynb_checkpoints*

1121
Bayes.ipynb Normal file

File diff suppressed because it is too large Load Diff

View File

@ -10,4 +10,12 @@ Zasady zaliczenia: 40 punktów podzielone następująco:
Klasyfikacja za pomocą naiwnej metody bayesowskiej (rozkłady ciągłe). Implementacja powinna założyć, że cechy są ciągłe (do wyboru rozkład normalny i jądrowe wygładzenie). Na wejściu oczekiwany jest zbiór, który zawiera p-cech ciągłych, wektor etykiet oraz wektor prawdopodobieństw a priori dla klas. Na wyjściu otrzymujemy prognozowane etykiety oraz prawdopodobieństwa a posteriori. Dodatkową wartością może być wizualizacja obszarów decyzyjnych w przypadku dwóch cech.
```Termin oddania na Moodle: do 31 maja. Prezentacja projektów 1 czerwca na ćwiczeniach.```
```Termin oddania na Moodle: do 31 maja. Prezentacja projektów 1 czerwca na ćwiczeniach.```
| Class | Acc_Train | Acc_Test | Uwagi |
|---|---|---|---|
| GaussianNB | 0.49 | 0.36 | - |
| MultinomialNB | - | - | Bez ujemnego inputu |
| ComplementNB | - | - | Bez ujemnego inputu |
| BernoulliNB | 0.35125 | 0.305 | - |
| CategoricalNB | - | - | Bez ujemnego inputu |

View File

@ -21,12 +21,19 @@ class DataPreparator:
def prepare_data(df: pd.DataFrame) -> pd.DataFrame:
data = deepcopy(df)
column = df["label"].apply(lambda x: DataPreparator.genre_dict[x])
data.insert(0, 'genre', column, 'float')
data.insert(0, 'genre', column, 'int')
data = data.drop(columns=['filename', 'label', 'length'])
return data
def train_test_split(df: pd.DataFrame) -> typing.Tuple[pd.DataFrame, pd.DataFrame, pd.Series, pd.Series]:
X = df.drop(["genre"], axis=1)
#X = df.drop(["genre"], axis=1)
X = df[["chroma_stft_mean","chroma_stft_var","rms_mean"]]
Y = df["genre"]
return train_test_split(X, Y, test_size = 0.20, random_state = False)
return train_test_split(X, Y, test_size = 0.20, random_state = False)
def print_df_info(df: pd.DataFrame) -> None:
for key in DataPreparator.genre_dict.keys():
count = len(df[df["genre"]==DataPreparator.genre_dict[key]])
print(f"Key: {key}\tCount: {count}")

View File

@ -13,11 +13,10 @@ else:
X_train, X_test, Y_train, Y_test = DataPreparator.train_test_split(data)
bayes = Bayes('music_genre.model')
bayes = Bayes('_model.model')
if(not bayes.model_exists):
bayes.train(X_train, Y_train)
Y_predicted = bayes.predict(X_train)
eval_result = bayes.eval(Y_train, Y_predicted)
print("Train:")
@ -25,5 +24,11 @@ print(eval_result[1])
Y_predicted = bayes.predict(X_test)
eval_result = bayes.eval(Y_test, Y_predicted)
print("Test:")
print(eval_result[1])
#Result preview
# for i in range(100):
# print(f"Expected: {Y_test.to_numpy()[i]}\tPred: {Y_predicted[i]}")
DataPreparator.print_df_info(data)