이리남성여자고등학교 로고이미지

정보

RSS 페이스북 공유하기 트위터 공유하기 카카오톡 공유하기 카카오스토리 공유하기 네이버밴드 공유하기 프린트하기
독서캠프 코드
작성자 오재관 등록일 25.07.14 조회수 13

import pandas as pd

music_df=pd.read_csv('train.csv')

music_df.tail()

 

 

music_df.info()

 

music_df.isnull().sum()

numeric_cols=music_df.select_dtypes(include='number')

mean=numeric_cols.mean()

data=music_df.fillna(mean)

data.info()

 

 

import seaborn as sns

import matplotlib.pyplot as plt

plt.figure(figsize=(16, 8))

corr=data.corr(numeric_only=True)

sns.heatmap(corr, annot=True,cmap='YlGnBu')

 

plt.figure(figsize=(40, 8))

sns.set(style='whitegrid')

x=data.groupby('Track Name')['Popularity'].mean().sort_values(ascending=False).head(10)

axis=sns.barplot(x=x.index, y=x)

axis.set_ylabel('Popularity',fontsize=20)

axis.set_xlabel('Song Title',fontsize=20)

 

X=data.iloc[:, 2:16]

y=data['Class']

 

from sklearn.model_selection import train_test_split 

X_train, X_test, y_train, y_test=train_test_split(X,y,test_size=0.2, random_state=42)

print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

 

from sklearn.pipeline import Pipeline

from sklearn.preprocessing import StandardScaler

from sklearn.svm import LinearSVC

svm_clf=Pipeline(  [('scaler', StandardScaler()), ('linear_svc', LinearSVC(C=1, loss='hinge', random_state=42))]  )

svm_clf.fit(X_train, y_train)

 

svm_clf.score(X_train, y_train)

 

svm_clf.score(X_test, y_test)

 

## 상당한 시간이 소요됨(10초정도)

from sklearn.svm import SVC

poly_kernel_svm_clf=Pipeline([ ('scaler', StandardScaler()), ('svm_clf', SVC(kernel='poly', degree=3, coef0=1, C=5)) ])

poly_kernel_svm_clf.fit(X_train, y_train)

 

 

poly_kernel_svm_clf.score(X_train, y_train)

 

 

poly_kernel_svm_clf.score(X_test, y_test)

 

 

 

rbf_kernel_svm_clf=Pipeline([ ('scaler', StandardScaler()), ('svm_clf', SVC(kernel='rbf', gamma=1, C=0.001)) ])

poly_kernel_svm_clf.score(X_train, y_train)

poly_kernel_svm_clf.score(X_test, y_test)

 

 

 

 

# 실제 분류

 

def extract_features(file_path):

    y, sr = librosa.load(file_path)

    features = []

 

    features.append(0)  # Popularity placeholder

 

    features.append(np.mean(librosa.feature.zero_crossing_rate(y)).item())

    features.append(np.mean(librosa.feature.rms(y=y)).item())

 

    chroma = librosa.feature.chroma_stft(y=y, sr=sr)

    features.append(int(np.argmax(np.mean(chroma, axis=1))))

 

    S = librosa.feature.melspectrogram(y=y, sr=sr)

    features.append(np.mean(librosa.power_to_db(S)).item())

 

    features.append(1)  # mode placeholder

 

    features.append(np.mean(librosa.feature.spectral_centroid(y=y, sr=sr)).item())

    features.append((1 - np.mean(librosa.feature.spectral_bandwidth(y=y, sr=sr))).item())

    features.append((1 - np.mean(librosa.feature.zero_crossing_rate(y))).item())

    features.append(np.mean(librosa.feature.spectral_rolloff(y=y, sr=sr)).item())

 

    harmonic = librosa.effects.harmonic(y)

    tonnetz = librosa.feature.tonnetz(y=harmonic, sr=sr)

    features.append(np.mean(tonnetz).item())

 

    tempo, _ = librosa.beat.beat_track(y=y, sr=sr)

    features.append(tempo.item())

 

    duration = librosa.get_duration(y=y, sr=sr)

    features.append(duration)

 

    features.append(4)  # time_signature placeholder

 

    return np.array(features)

features = extract_features('06.mp3').reshape(1, -1)

print("Features 개수:", features.shape[1])  # 반드시 14개

print("Features:", features)

prediction = poly_kernel_svm_clf.predict(features)

print("예측 장르:", prediction[0])

 

다음글 온라인 코딩파티