В настоящее время я работаю над проектом, в котором моя команда и я должны выбрать набор данных и применить к нему некоторые методы машинного обучения (SLR, MLR et c.), Поэтому для меня я делаю логическую регрессию. Мой набор данных связан с самыми популярными песнями на Spotify 2010-2019, и я хочу посмотреть, как продолжительность и танцевальность песни влияют на ее популярность. Учитывая, что значения популярности являются числовыми, я преобразовал значение популярности каждой песни в двоичные значения. Следовательно, значение популярности песни изменится на «0», если оно ниже 65, и «1», если оно выше значения 65. Затем я решил построить график регрессии 2d logisti c для двух измерений. Конечный результат состоит в том, что оба значения «0» и «1» собраны в одной и той же области, где они должны быть отделены друг от друга, и должна быть граница принятия решения при показе .5. Я просто хочу знать, что это говорит о связи между популярностью песен и их продолжительностью и танцевальностью соответственно. Это должно быть нормально или я ошибся?
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LogisticRegression
df = pd.read_csv('top10s [SubtitleTools.com] (2).csv')
BPM = df.bpm
BPM = np.array(BPM)
Energy = df.nrgy
Energy = np.array(Energy)
dB = df.dB
dB = np.array(dB)
Live = df.live
Live = np.array(Live)
Valence = df.val
Valence = np.array(Valence)
Acous = df.acous
Acous = np.array(Acous)
Speech = df.spch
Speech = np.array(Speech)
def LogReg0732():
Dur = df.dur
Dur = np.array(Dur)
Dance = df.dnce
Dance = np.array(Dance)
Pop = df.popu
df.loc[df['popu'] <= 65, 'popu'] = 0
df.loc[df['popu'] > 65, 'popu'] = 1
Pop = np.array(Pop)
X = Dur
X = np.stack((X, Dance))
y = Pop
clf = LogisticRegression().fit(X.T, y)
print("Coef ", clf.intercept_, clf.coef_)
xx, yy = np.mgrid[np.min(Dur):np.max(Dur), np.min(Dance):np.max(Dance)]
gridxy = np.c_[xx.ravel(), yy.ravel()]
probs = clf.predict_proba(gridxy)[:,1].reshape(xx.shape)
f, ax = plt.subplots(figsize=(20,8))
contour = ax.contourf(xx, yy, probs, 25, cmap="BrBG", vmin=0, vmax=1)
ax_c = f.colorbar(contour)
ax_c.set_ticks([0, 1/4, 1/2, 3/4, 1])
idx = np.where(y==1); idx = np.reshape(idx,np.shape(idx)[1])
y1 = X[:,idx]
idx = np.where(y==0); idx = np.reshape(idx,np.shape(idx)[1])
y0 = X[:,idx]
ax.scatter(y1[0,:], y1[1,:], c='green')
ax.scatter(y0[0,:], y0[1,:], c='blue')
plt.xlabel('Danceability')
plt.ylabel('Duration')
plt.savefig('LR1.svg')
plt.show()
LogReg0732()