""" Использовать нейронную сеть по варианту для ваших данных по варианту, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной вами задачи. """ """ Задача, решаемая нейронной сетью: Регрессия: Предсказание популярности нового музыкального трека на основе его определённых характеристик. """ # 12 вариант # Набор данных по курсовой: "Prediction of music genre" # Модель мейронной сети: MLPRegressor import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn import metrics from sklearn.neural_network import MLPRegressor from sklearn.model_selection import train_test_split DATASET_FILE = 'music_genre.csv' def main(): df = open_dataset(DATASET_FILE) # берём полный набор данных print("\033[92m[----------> Набор данных <----------]\033[00m") print(df) # Перевод ладов (минор/мажор) в числовые признаки df_music = df.copy() df_music['mode'] = df_music['mode'].apply(lambda x: 1 if x == 'Major' else 0) X = df_music.drop(columns=['popularity']) # характеристики музыкального трека y = df_music['popularity'] # уровень популярности # Разделение датасета на тренировочные (99%) и тестовые данные (1%) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01) model = MLPRegressor( # несколько размеров слоёв и узлов hidden_layer_sizes=(50, 50, 50, 50,), # функция активации (relu, tanh, identity) activation='relu', max_iter=2000 ) model.fit(X_train, y_train) # Предсказание на тестовых данных y_pred = model.predict(X_test) print("\033[92m[----------> Оценка модели <----------]\033[00m") print("Коэффициент детерминации = ", round(metrics.r2_score(y_test, y_pred), 3)) print("Потери регрессии среднеквадратичной логарифмической ошибки = ", round(metrics.mean_squared_log_error(y_test, y_pred), 3)) # График для наглядности sns.regplot(x=y_test, y=y_pred, scatter_kws={'s': 10}, line_kws={'color': 'red'}) plt.xlabel('Реальность') plt.ylabel('Предсказание') plt.title('MLPRegressor на примере популярности треков') plt.savefig("1_plot_result") plt.show() # Функция считывания и очищения csv-файла def open_dataset(csv_file): # открываем файл с указанием знака-отделителя df = pd.read_csv(csv_file, delimiter=',') # выбираем необходимые признаки df = df[['mode', 'tempo', 'instrumentalness', 'acousticness', 'speechiness', 'danceability', 'energy', 'liveness', 'valence', 'loudness', 'popularity']] # очищаем набор данных от пустых и неподходящих значений df = df[df['tempo'] != '?'] df = df.dropna() return df if __name__ == "__main__": main()