020/Music-Playlist-Generator
/README.md
import numpy as np
import pandas as pd
import os
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import MinMaxScaler
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
sns.set_theme(style="whitegrid")
sns.set_style(style="darkgrid")
from scipy.stats import pearsonr
# 加载数据
file_path = r"Music-Playlists\music-playlists.csv"
music_data = pd.read_csv(file_path)
# 对数据进行预处理
music_data['playlist_id'] = music_data['playlist_id'].astype('category')
music_data['track_id'] = music_data['track_id'].astype('category')
music_data['user_id'] = music_data['user_id'].astype('category')
# 使用MinMaxScaler进行标准化处理
scaler = MinMaxScaler()
music_data[['energy', 'acousticness', 'danceability', 'tempo']] = scaler.fit_transform(music_data[['energy', 'acousticness', 'danceability', 'tempo']])
# 从数据中提取目标变量和特征
target_variable = 'play_count'
features = ['energy', 'acousticness', 'danceability', 'tempo']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(music_data[features], music_data[target_variable], test_size=0.2, random_state=42)
# 模型评估指标
def evaluate_model(y_true, y_pred, feature_names):
mse = mean_squared_error(y_true, y_pred)
r2 = pearsonr(y_true, y_pred)[0]
return mse, r2
# 训练决策树回归模型
model = DecisionTreeRegressor(random_state=42)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
# 训练随机森林回归模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
# 训练Adaboost回归模型
model = AdaBoostRegressor(random_state=42)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
# 模型评估
mse_train, r2_train = evaluate_model(y_train, y_train_pred, features)
mse_test, r2_test = evaluate_model(y_test, y_test_pred, features)
# 输出结果
print(f"Decision Tree Regression: MSE = {mse_train}, R2 = {r2_train}")
print(f"Random Forest Regression: MSE = {mse_test}, R2 = {r2_test}")
print(f"AdaBoost Regression: MSE = {mse_test}, R2 = {r2_test}")
print(f"Linear Regression: MSE = {mse_test}, R2 = {r2_test}")
# 绘制特征重要性
feature_importances = pd.DataFrame(model.feature_importances_, index=features, columns=['importance']).sort_values('importance', ascending=False)
feature_importances.plot(kind='barh')
plt.title('Feature Importances')
plt.show()
# 绘制目标变量与特征的关系
sns.pairplot(music_data[features + [target_variable]], hue='playlist_id', height=2, diag_kind='kde')
plt.show()
/visualize_feature_importances.py
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.svm import SVR
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
sns.set_theme(style="whitegrid")
sns.set_style(style="darkgrid")
from scipy.stats import pearsonr
# 加载数据
file_path = r"Music-Playlists\music-playlists.csv"
music_data = pd.read_csv(file_path)
# 对数据进行预处理
music_data['playlist_id'] = music_data['playlist_id'].astype('category')
music_data['track_id'] = music_data['track_id'].astype('category')
music_data['user_id'] = music_data['user_id'].astype('category')
# 使用StandardScaler进行标准化处理
scaler = StandardScaler()
music_data[['energy', 'acousticness', 'danceability', 'tempo']] = scaler.fit_transform(music_data[['energy', 'acousticness', 'danceability', 'tempo']])
# 从数据中提取目标变量和特征
target_variable = 'play_count'
features = ['energy', 'acousticness', 'danceability', 'tempo']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(music_data[features], music_data[target_variable], test_size=0.2, random_state=42)
# 模型评估指标
def evaluate_model(y_true, y_pred, feature_names):
mse = mean_squared_error(y_true, y_pred)
r2 = pearsonr(y_true, y_pred)[0]
return mse, r2
# 训练随机森林