Notebook
This commit is contained in:
parent
d7d5047587
commit
0bb7eb7a58
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,4 +3,5 @@ venv*
|
||||
.vscode*
|
||||
__pycache__*
|
||||
music_genre.csv
|
||||
music_genre.model
|
||||
*.model
|
||||
.ipynb_checkpoints*
|
1121
Bayes.ipynb
Normal file
1121
Bayes.ipynb
Normal file
File diff suppressed because it is too large
Load Diff
10
Readme.md
10
Readme.md
@ -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 |
|
@ -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}")
|
9
main.py
9
main.py
@ -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)
|
Loading…
Reference in New Issue
Block a user